活动地址:CSDN21天学习挑战赛
Java基础——final关键字
在前面的学习过程中,为了声明常量使用过final关键字,在Java中final关键字的作用还有很多,final关键字能修饰变量、方法和类。
目录
final修饰变量
final修饰的变量即成为常量,只能赋值一次,但是final所修饰局部变量和成员变量有所不同。
- final修饰的局部变量必须使用之前被赋值一次才能使用。
- final修饰的成员变量在声明时没有赋值的叫“空白final变量”。空白final变量必须在构造方法或
静态代码块中初始化。
final修饰变量示例代码如下:
//FinalDemo.java文件packagecom.shouyerenst;classFinalDemo{voiddoSomething(){// 没有在声明的同时赋值finalint e; ①
// 只能赋值一次
e =100;②
System.out.print(e);// 声明的同时赋值finalint f =200; ③
}//实例常量finalint a =5;// 直接赋值④ finalint b;// 空白final变量 ⑤ //静态常量finalstaticint c =12;// 直接赋值 ⑥finalstaticint d;// 空白final变量 ⑦ // 静态代码块static{// 初始化静态变量
d =32; ⑧
}// 构造方法FinalDemo(){// 初始化实例变量
b =3; ⑨
// 第二次赋值,会发生编译错误// b = 4; ⑩ }}
上述代码第①行和第③行是声明局部常量,其中第①行只是声明没有赋值,但必须在使用之前赋值(见代码第②行),其实局部常量最好在声明的同时初始化。
代码第④、⑤、⑥和⑦行都声明成员常量。代码第④和⑤行是实例常量,如果是空白final变量(见代码第⑤行),则需要在构造方法中初始化(见代码第⑨行)。代码第⑥和⑦行是静态常量,如果是空白final变量(见代码第⑦行),则需要在静态代码块中初始化(见代码第⑧行)。
另外,无论是那种常量只能赋值一次,见代码第⑩行为b常量赋值,因为之前b已经赋值过一次,因此
这里会发生编译错误。
final修饰类
final修饰的类不能被继承。有时出于设计安全的目的,不想让自己编写的类被别人继承,这时可以使用final关键字修饰父类。
示例代码如下:
//SuperClass.java文件packagecom.shouyerenst;finalclassSuperClass{}classSubClassextendsSuperClass{//编译错误}
在声明SubClass类时会发生编译错误。
final修饰方法
final修饰的方法不能被子类覆盖。有时也是出于设计安全的目的,父类中的方法不想被别人覆盖,这是可以使用final关键字修饰父类中方法。
示例代码如下:
//SuperClass.java文件packagecom.shouyerenst;classSuperClass{finalvoiddoSomething(){System.out.println("in SuperClass.doSomething()");}}classSubClassextendsSuperClass{@OverridevoiddoSomething(){//编译错误System.out.println("in SubClass.doSomething()");}}
子类中的void doSomething()方法试图覆盖父类中void doSomething()方法,父类中的voiddoSomething()方法是final的,因此会发生编译错误。
感觉不错的话,动手点个赞吧!
版权归原作者 守夜人st 所有, 如有侵权,请联系我们删除。