background image

19.

  

20.

    public static final int STATIC_E;   

21.

    // 

 

静态常量,在静态初始化块中初始化   

22.

    static {   

23.

        STATIC_E = 

50

;   

24.

    }   

25.

  

26.

    // 

 

静态变量不能在初始化块中初始化   

27.

    // public static final int STATIC_F;   

28.

    // {   

29.

    // STATIC_F = 60;   

30.

    // }   

31.

  

32.

    public final int G;   

33.

  

34.

    // 静态 final

 

变量不可以在构造器中初始化   

35.

    // public static final int STATIC_H;   

36.

  

37.

    // 

 

在构造器中初始化   

38.

    public FinalTest() {   

39.

        G = 

70

;   

40.

        // 静态 final

 

变量不可以在构造器中初始化   

41.

        // STATIC_H = 80;   

42.

  

43.

        // 给 final

 

的变量第二次赋值时,编译会报错   

44.

        // A = 99;   

45.

        // STATIC_D = 99;   

46.

    }   

47.

  

48.

    // final

 

变量未被初始化,编译时就会报错   

49.

    // public final int I;   

50.

  

51.

    // 静态 final

 

变量未被初始化,编译时就会报错   

52.

    // public static final int STATIC_J;   

53. }  

我们运行上面的代码之后出了可以发现 final 变量(常量)和静态 final 变量(静态常量)未被初始化时,编

 

译会报错。

用 final 修饰的变量(常量)比非 final 的变量(普通变量)拥有更高的效率,因此我们在实际编程中应该尽

 

可能多的用常量来代替普通变量,这也是一个很好的编程习惯。

当 final 用来定义一个方法时,会有什么效果呢?正如大家所知,它表示这个方法不可以被子类重写,但是

 

它这不影响它被子类继承。我们写段代码来验证一下:

Java

 

代码

§

1.

class ParentClass {   

2.

    public final void TestFinal() {   

3.

        System.out.println("父类--这是一个 final 方法");   

4.

    }