final用法
作用在类上
final
作用于类上时表示这个类不允许被继承,其类内部的方法会被隐性的指定为final
方法。
在设计时,除非出于安全考虑,或者这个类永远不会被改变,否则不要设置某个类为final
。
修饰方法
当final
作用于方法上时,这个方法无法被重写。
使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。 --《Java编程思想》
修饰变量
作用在变量上是final
最常的使用方法。
- 对于一个
final
的基本数据类型变量,一定被定义之后,这个变量将再也无法被改变 - 对于一个
final
的对象类型,一旦被定义之后,这个对象的引用无法改变
final特性
final变量和普通变量的区别
-
final
修饰的是基本类型和String时,如果在编译期能够知道这个值,那么就会被优化为编译期常量。
final String a = "hello";
String b = "helloWorld";
boolean equals = a + "world" = b; // true
在上面这个例子中,fianl
修饰的a在使用时被直接替换成了a的值,有点类似于宏定义这个概念。不过这样的优化只有编译器明确知道这个对象的值才会这样进行优化。
final修饰的对象引用不变,但是属性可变
final User user = new User();
user = new User(); // ERROR
user.setName("jack");// ACCESS
final和static
final
保证一个变量不会被改变,而static
保证了系统中只会保存一份副本。
网友评论