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.
}