final
final
final可以修饰类、变量、方法,用于表示被修饰的类、变量、和方法不可改变。
修饰变量
变量一旦获得初始值便不能再改变
1.修饰成员变量
必须显示指定初始值,系统不会为final成员进行隐式的初始化
- 修饰类变量:必须在声明该变量时或者在静态初始化块中指定初始值,并且只能在其中一个中指定
- 修饰实例变量:必须在声明该变量时或者在非静态初始化块中或者在构造器中指定初始值,并且只能在三者之一中指定
2.修饰局部变量
系统不会为局部变量初始化,所以我们必须自己对其显示初始化
用final修饰的局部变量可以在声明的时候初始化,也可以在后面某个合适的地方初始化,只要没有在初始化之前访问就可以
3.final修饰基本类型变量和引用类型变量的区别
- final修饰基本类型变量时,不能再对基本类型变量赋值,也就是说这个变量不能被改变了。
- final修饰引用类型变量时,只保证变量引用的内容(即地址)不会改变,即该变量一直引用同一个对象,但是对象里面的数据是可以改变的
修饰方法
表示该方法不能被重写
子类中不允许“重写”父类中被final修饰的方法,子类中有和父类中重名的方法(被final修饰的)将会报错,除private修饰的方法。因为private修饰的方法是只属于父类本身的,子类中和private方法重名的方法只是一个和父类中的方法完全无关的方法,这并不是真正的重写。
public class FinalTest extends SuperClass{
private void f(){} //和父类无关的新方法
private void h(){} //和父类无关的新方法
//public void g(){} //这里会报错
}
class SuperClass {
private void f(){}
private final void h() {}
public final void g() {}
}
修饰类
表示该类不能有子类,即不能被继承