首先一定要明确final可以修饰 局部变量,成员变量, 方法,类。
final修饰局部变量时,对于基本类型而言,该局部变量一经赋值,便不可以被再改变。
对于引用类型而言,引用地址不可改变,但其内容可以改变。
final修饰成员变量时,需要注意必须初始化赋值。因为final修饰后的成员变量,系统不会给他默认赋值。也就是说 final string str;系统不会给他默认值为null。 并且编译器会报错。这个时候给str赋值有两种方法,一种是直接赋值,一种是在构造代码块里面进行赋值。
不初始化,一定报错。
初始化的两种方法:
1.在构造器中对final修饰的成员变量初始化:
2.在定义final修饰的成员变量的时候就对其进行初始化赋值。
※ ※ ※ ※ ※ ※ 需要注意的是:不能在构造方法中对final修饰的成员变量初始化赋值
3.final修饰方法的时候,不能与abstract修饰词同时使用,编译器会报错。因为final修饰的方法是不可改变,是不允许被继承和覆盖重写的。而abstract修饰的方法或者类。是希望被继承,覆盖重写。
final修饰的父类方法不允许被子类重写和继承
4.final修饰类的时候和修饰方法的时候一样不能与abstract修饰词同时使用,否则编译报错
final修饰类后,这个类将不能够被继承,也就是太监类,只有爹没有儿子。例如String,System类就是一个final修饰的不可改变的类。特别需要注意的是,final修饰的类,其属性和方法并不是默认final修饰的。
final修饰的类只有父类没有子类。