Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。可以修饰的对象: final变量、final方法和final类。
1. final类不能被继承,没有子类,final类中的方法默认是final的。 2. final方法不能被子类的方法覆盖,但可以被继承。 3. final成员变量表示常量,只能被赋值一次,赋值后值不再改变。 4. final不能用于修饰构造方法。 注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。 final int X=3; X=4; //出错 final标记的成员变量必须在声明的同时或在该类的构造方法中显式赋值,然后才能使用。 class Test { final int X=3; } 或者: class Test { final int X; Test() { X=3; } } 5. 方法中定义的内置类只能访问该方法内的final类型的局部变量,用final定义的局部变量相当于是一个常量,它的生命周期超出方法运行的生命周期,这种情况的应用,我们已在第三章中讲过。将一个形参定义成final也是可以的,这就限定了我们在方法中修改形式参数的值。 6. 但这个“常量”也只能在这个类的内部使用,不能在类的外部直接使用。当我们用public static final共同标记常量时,这个常量就成了全局的常量。而且这样定义的常量只能在定义时赋值,即使在构造函数里面也不能对其进行赋值。如: class Xxx { public static final int X=3 ......}