浅析final关键字
浅析final关键字
final单词字面意思是“最终的,不可更改的”。所以在java中final关键字表示终态,即最终的状态,“这个东西不能被改变”。
final关键字可以用来修饰类、方法、数据(包括成员变量、局部变量与方法参数)。
(1)final类
final关键字修饰的类是不能被继承的。在这里插入一些个人想法,当一个类被修饰为final时,代表它无法被继承,即不能被扩展,所以从设计的角度来考虑,自己写的类一般不要修饰为final;而对于辅助性的类为了不让外部破坏内部数据,可以修饰为final,这些只是个人想法,如果有错,望指正!
(2)final方法
final关键字修饰的方法不能被重写。可能会使用final方法的两个原因:一是给方法”上锁”,防止继承类修改它;二是程序执行效率考虑,编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。
(3)final成员变量
当final关键字修饰成员变量时,表示该成员变量只能进行一次赋值操作,并且在生存期内不可以改变它的值。final成员变量必须在声明时进行初始化或者在构造器中进行初始化,否则编译器会报错。
(4)final局部变量
final修饰局部变量时只能初始化(赋值)一次,并且在生存期内不可以改变它的值。与成员变量不同,final局部变量在声明时可以不初始化,只需要保证在使用之前初始化赋值即可。
(5)final参数
当final关键字修饰参数时比较复杂,final修饰方法参数时,是在调用方法传递参数时候初始化的。参数被声明为final,若是基本参数,那它就是一个常量,在调用方法传递参数后不能被修改;若是一个引用变量,那么它在调用方法传递参数后就不能被修改指向另一个对象,但可以修改该引用所指对象的内容。
注意:
(1)如果一个类被修饰为final,结果只是禁止继承,没有更多的限制。所以其数据成员可以是final的,也可以不是,取决于我们的具体选择。
(2)final类中的所有方法被默认为final方法,如果一个类不能被继承,则其内部的方法不会被重写,所以编译器默认final类中的方法是final方法(final类中的方法你添加final修饰符不会增加任何效果。
想一想:
在创建一个类时,可以同时用final关键字与abstract关键字修饰吗?