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只保障这个援用类型变量所援用的地址不会扭转,即始终援用同一个对象,但这个对象齐全能够产生扭转。