final 与 static
- final
- 修饰类
- 不能被继承
- final类中的方法默认是final的
- 修饰方法
- 可以被继承,不能被重写
- 修饰变量
- 成为常量,只能赋值一次,赋值后不能改变
- 如果变量是一个对象,只要引用不变它的属性是可以改变的
- final不能修饰构造方法
- 父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。
- 当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值。
- 修饰类
- static
- 修饰成员变量
- 静态变量,加载类的过程中就会为静态变量分配内存,使用类名直接引用
- 修饰方法
- 静态方法 不能访问所属类不带static的成员变量和成员方法
- 修饰代码块
- 静态代码块 位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。
- 修饰成员变量
- static和final一块用
- static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!
-
对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
-
对于方法,表示不可覆盖,并且可以通过类名直接访问。
-
特别要注意一个问题:
- 对于被static和final修饰过的实例常量,实例本身不能再改变了,但对于一些容器类型(比如,ArrayList、HashMap)的实例变量,不可以改变容器变量本身,但可以修改容器中存放的对象,这一点在编程中用到很多。
-
- static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!