1、final可以⽤来修饰的结构:类、⽅法、变量
2、final⽤来修饰⼀个类:此类不能被其它类继承。
当我们需要让⼀个类永远不被继承,此时就可以⽤final修饰,但要注意:final类中所有的成员⽅法都会隐式的定义
为final⽅法。
⽐如:String类、System类、StringBuffer类
3、final ⽤来修饰⽅法 :表明此⽅法不可以被重写
作⽤:
(1) 把⽅法锁定,以防⽌继承类对其进⾏更改。
(2) 效率,在早期的java版本中,会将final⽅法转为内嵌调⽤。但若⽅法过于庞⼤,可能在性能上不会有多⼤提升。
因此在最近版本中,不需要final⽅法进⾏这些优化了。
final⽅法意味着“最后的、最终的”含义,即此⽅法不能被重写。
⽐如:Object类中的getClass( )
4、final ⽤来修饰变量 ,此时变量就相当于常量
final⽤来修饰属性:可以考虑赋值的位置有:显式初始化、代码块中初始化、构造器中初始化
final修饰局部变量:尤其是使⽤final修饰形参时,表明此形参是⼀个常量。当我们调⽤此⽅法时,给常量形
参赋⼀个实参,⼀旦赋值之后,就只能在⽅法体内使⽤此形参的值,不能重新进⾏赋值。如果final修饰⼀个引⽤类型时,则在对其初始化之后便不能再让其指向其他对象了或者说他的地址不能发⽣
变化了(因为引⽤的值是⼀个地址,final要求值,即地址的值不发⽣变化),但该引⽤所指向的对象的内容
是可以发⽣变化的。本质上是⼀回事。
5、使⽤ final 关键字声明类、变量和⽅法需要注意以下⼏点:
final ⽤在变量的前⾯表示变量的值不可以改变,此时该变量可以被称为常量。
final ⽤在⽅法的前⾯表示⽅法不可以被重写(⼦类中如果创建了⼀个与⽗类中相同名称、相同返回值类型、
相同参数列表的⽅法,只是⽅法体中的实现不同,以实现不同于⽗类的功能,这种⽅式被称为⽅法重写,⼜称
为⽅法覆盖。这⾥了解即可,教程后⾯我们会详细讲解)。
final ⽤在类的前⾯表示该类不能有⼦类,即该类不可以被继承。
final 修饰变量
final 修饰的变量即成为常量,只能赋值⼀次,但是 final 所修饰局部变量和成员变量有所不同。
final 修饰的局部变量必须使⽤之前被赋值⼀次才能使⽤。
final 修饰的成员变量在声明时没有赋值的叫“空⽩ final 变量”。空⽩ final 变量必须在构造⽅法或静态代码块
中初始化。
注意:final 修饰的变量不能被赋值这种说法是错误的,严格的说法是,final 修饰的变量不可被改变,⼀旦获得了
初始值,该 final 变量的值就不能被重新赋值。