一:final修饰的变量即成为常量,只能赋值一次,但是final所修饰局部变量和
员变量有所不同。
(1)final修饰的局部变量必须使用之前被赋值一次才能使用
(2)final修饰的成员变量在声明时没有赋值的叫“空白final变量”,空白final变量必须在构造器方法或静态代码块中初始化。
(3)以下为final修饰变量示例代码如下:
上述代码第①行和第③行是声明局部常量,其中第①行只是声明没有赋值,但必须在使用之前赋值 (见代码第②行),其实局部常量最好在声明的同时初始化。 代码第④、⑤、⑥和⑦行都声明成员常量。代码第④和⑤行是实例常量,如果是空白final变量(见代 码第⑤行),则需要在构造方法中初始化(见代码第⑨行)。代码第⑥和⑦行是静态常量,如果是空白final变量(见代码第⑦行),则需要在静态代码块中初始化(见代码第⑧行)。 另外,无论是那种常量只能赋值一次,见代码第⑩行为b常量赋值,因为之前b已经赋值过一次,因此 这里会发生编译错误。
二:(1)final 修饰类
final修饰的类不能被继承,有时出于设计安全的目的,不想让自己编写的类被别人继承,这时可以使用final关键字修饰父类。
代码如图所示:
在声明SubClass类时会发生编译错误。
三:(1)final修饰的方法不能被子类覆盖,有时也是出于设计安全的目的,父类的方法不想被别人覆盖,这是可以使用final关键字修饰符类中方法。
代码如图所示:
子类中的void doSomething()方法试图覆盖父类中void doSomething()方法,父类中的void doSomething()方法是final的,因此会发生编译错误。