final变量只能赋值一次,赋值的形式有三种:
1)申明变量时间接赋值;
2)非动态成员变量在{}块中赋值,动态成员变量在static{}块中赋值;
3)非动态成员变量在构造方法中赋值。
final润饰类
final类不能被继承,因而不会有子类。final类中的办法不管是否有final批改,都是final的。
上面定义了一个简略的final类:
public final class FinalClass { }
//上面的类继承将会呈现编译谬误
class Sub extends FinalClass { }
final润饰办法
final办法不能被override。若父类中的游戏办法为final的,则子类不能override该办法,但能够调用该办法(父类的final办法)。
上面的程序试图重写游戏http://www.cungun.comfinal办法,将会引发编译谬误:
public class FinalMethod {
public final void say () { }
}
class Sub extends FinalMethod {
//上面办法将会呈现编译谬误
public void say () { }
}
final成员变量
final润饰的变量不可被扭转,意思是不能被从新赋值。因为final润饰的成员变量不能从新赋值,所以Java语规定:final润饰的成员变量必须由程序员显示的指定初始值。
final润饰的类变量和实例变量指定初始值得中央如下:
1)类变量:必须在动态初始化块中指定初始值或申明该类变量时指定初始值,而且只能二选一指定。
2)实例变量:必须在非动态初始化块、申明该实例变量或结构器中指定初始值,而且只能三选一指定。
final润饰根本类型变量和援用类型变量的区别:
当final润饰根本类型变量时,改根本类型变量不能被扭转。但对于援用类型变量而言,它保留的仅仅只是援用,final只保障这个援用类型变量所援用的地址不会扭转,即始终援用同一个对象,但这个对象齐全能够产生扭转。