您的位置:首页 > 其它

static和final的区别与用途

2018-02-09 22:53 211 查看
static:表示静态或者全局,可以修饰属性、方法、代码块,静态属性和静态方法是属于类的(也可以说是属于类的所有对象的),可以用类名.静态属性/静态方法来访问,用static修饰的代码块是静态代码块,当虚拟机(JVM)加载该类时,就会执行静态代码块。

修饰属性:当static修饰属性时,该属性称为静态变量或者类变量,该变量是在JVM加载类时初始化的;不被static修饰的属性是实例变量,在创建对象时被初始化,实例变量是各个对象独有的。使用一个类的静态变量并不会触发该类的加载。

修饰方法:被static修饰的方法称为类方法或者静态方法,一般通过类名调用。静态方法中不能使用this、super关键字,也不能访问实例变量和实例方法,只能访问静态变量和静态方法。父子类中,静态方法只能被静态方法覆盖,非静态方法只能被非静态方法覆盖。

修饰代码块:被static修饰的代码块被称为静态代码块,和代码块和属性以及方法是同一个等级的成员,可以有多个,位置可以随便放。JVM加载类时会执行这些静态代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。

final:表示常量、最终,final可以修饰变量、方法、类。final修饰的局部变量为常量,一旦赋值不能修改。final修饰的成员变量必须在声明时赋值,或者在构造函数中,或者在代码块中赋初值,一旦赋值不能更改。final方法不能被子类重写。final类不能被继承,没有子类,final类中的方法默认是final的。final不能修饰构造方法。java中的String、Math等类就是final的。

修饰变量:final修饰的局部变量为常量,一旦赋值不能修改。final修饰的成员变量必须在声明时赋值,或者在构造函数中,或者在代码块中赋初值,一旦赋值不能更改。如果final修饰的是对象引用,则引用不可变,引用的对象可以改变。

修饰方法:final修饰的方法不能被子类重写。

修饰类:final修饰的类不能被继承。

-
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: