一、简介
final在英文中代表“最终的”。final修饰的变量、方法、类具有不可变性。
二、作用范围
final关键字可以修饰局部变量、成员变量、方法和类。
final的不可变性,指的是引用不可修改
1.修饰变量
使用说明:
final修饰的成员变量需要立刻赋值
final修饰的成员变量可以显式初始化、构造器初始化和代码块初始化
final修饰的变量可以称为常量
代码如下:
class Person {
//显式初始化
public final int var1 =1;
public final int var2;
public final int var3;
//代码块初始化
{
var2=2;
}
//构造器初始化
Person(int var3) {
this.var3 = var3;
}
}
若成员变量同时被static和final修饰,可以通过显式初始化或在static代码块中初始化
同时被static和final修饰的成员变量,它的变量名要大写
代码如下:
class Person {
//显式初始化
public static final int VAR1 =1;
public static final int VAR2;
//静态代码块初始化
static{
VAR2=2;
}
}
final修饰的局部变量可以暂且不赋值,但在使用变量前必须初始化
代码如下:
public class Test {
public static void main(String[] args) {
final int i;
System.out.println(i);//编译不通过
}
}
public class Test {
public static void main(String[] args) {
final int i;
i=1;
System.out.println(i);//正常输出 1
}
}
2.修饰方法
使用说明:
final修饰的方法不能被子类重写
代码如下:
class Person {
public final void run() {
System.out.println("person在run");
}
}
class child extends Person{
//编译不通过
public final void run() {
System.out.println("child在run");
}
}
3.修饰类
使用说明:
final修饰的类不能被继承
代码如下:
final class Person {
}
//编译不通过
class child extends Person {
}
final关键字的好处
- 使用final关键字可以提高性能,static final修饰的变量在类加载阶段就完成了初始化
- final变量是不可变的,在多线程下可以共享而不用需要额外的加锁开销