final修饰符
- final具有“不可改变的”含义,可以修饰非抽象类,非抽象方法和变量
- 用final修饰的类不能被继承
- 用final修饰的方法不能被覆盖
- 用final修饰的变量表示常量,只能被赋值一次
- 用final不能修饰构造方法
final修饰变量
final修饰变量-局部变量
必须先赋值,再使用,如果从未使用,可以不赋值
public class TestFinalLocalVar1 {
public static void main(String args[]){
final int A = 10;
//A++ //错误
final int n;
}
}
final修饰变量-实例变量
final修饰实例变量时,必须对实例变量显示赋值或提供构造方法对其赋值
class MyClass{
final int I ; //编译出错
}
class MyClass{
final int I = 10; //显式赋值
}
class MyClass{
final int I ;
public MyClass(int i){
this.I = i; //通过构造函数赋值
}
}
final修饰变量-类变量
final 修饰类变量,只能在定义处初始化
class MyClass{
static final int I=20;
}
final修饰方法
- final修饰符修饰的方法不能被子类覆盖
- 在某些情况下,出于安全的考虑,父类不让子类覆盖某个方法,可以把这个方法声明为final类型,例如:java.lang.Object的getClass()方法.而equals()方法没有final修饰,可以在子类中覆盖,实现新的需求
final修饰类
- final修饰符修饰的类不能被继承
- 如果某个类不想被其他类继承,可以考虑把类定义为final类型
- 不是专门为继承而设计的类.类本身的方法之间有复杂的调用关系.假如随便继承这些类,子类可能会错误的修改父类的实现细节
- 出于安全的原因,类的实现细节不能被扩展
- 创建对象模型时,确信这个类不会被扩展
- 代码参见:java.lang.String