Java final用法详解
final 的意思是“最终的”和“无法更改的”。在 Java 程序中,使用关键字 final 修饰的变量、方法和类具有以下特点:
因此,在程序设计中要谨慎使用关键字 final。
使用关键字 final 修饰的变量只能被赋值一次,如果再次对该变量赋值,那么程序编译时会报错。被关键字 final 修饰的变量必须进行初始化,既可以在定义时初始化,又可以在构造方法或非静态代码块中初始化。
下面演示使用关键字 final 初始化之后无法被更改的过程。
【实例】使用关键字final修饰属性。
除了可以修饰变量,使用关键字 final 还可以修饰方法(称为最终方法)。因此,使用关键字 final 修饰的方法不能被覆盖重写。最终方法主要影响继承中子类对父类方法的重写,如果父类不希望被子类重写,那么使用关键字 final 修饰即可,具体方法如下面的实例所示。
【实例】使用关键字 final 修饰方法。

图 1 运行结果
由运行结果可知,使用关键字 final 修饰的 age() 方法被重写后,编译会报错。
除此之外,使用关键字 final 修饰的类无法再被继承。使用关键字 final 修饰的类无法被任何类继承,也就是说,既无法派生子类,又无法进行任何改动。下面用一个实例为例来说明。
【实例】使用关键字 final 修饰类。
- 使用关键字 final 修饰的变量称为常量,只能被赋值一次;
- 使用关键字 final 修饰的方法称为最终方法,不能被子类重写;
- 使用关键字 final 修饰的类称为最终类,不能被继承;
因此,在程序设计中要谨慎使用关键字 final。
使用关键字 final 修饰的变量只能被赋值一次,如果再次对该变量赋值,那么程序编译时会报错。被关键字 final 修饰的变量必须进行初始化,既可以在定义时初始化,又可以在构造方法或非静态代码块中初始化。
下面演示使用关键字 final 初始化之后无法被更改的过程。
【实例】使用关键字final修饰属性。
public class Test{
int numb;
public static void main(string[] args){
// 初始化使用关键字final修饰的变量,并且初始化后不可修改
final int numa = 1;
// numa++; // 错误,不能修改 numa
int numc = add(2,3);
System.out.println(numc);
final FinalVar f = new FinalVar();
// f = null; // 错误,不能改变引用指向
f.numb = 100; // f引用指向的对象属性可以更改,只要指向不变
System.out.println(f.numb);
}
public static int add(final int numa, int numb){
// numa++; // 错误,不能修改 numa
numb++;
return numa + numb;
}
}
运行结果为:
6
100
不能分配最终参数numa
f 引用指向的对象确定后,就无法再更改。提示的错误信息为:无法为最终变量f分配值
除了可以修饰变量,使用关键字 final 还可以修饰方法(称为最终方法)。因此,使用关键字 final 修饰的方法不能被覆盖重写。最终方法主要影响继承中子类对父类方法的重写,如果父类不希望被子类重写,那么使用关键字 final 修饰即可,具体方法如下面的实例所示。
【实例】使用关键字 final 修饰方法。
class Human5 {
// 使用关键字final修饰age()方法,意味着该方法不能被子类重写
public final void age() {
// 代码
}
}
class Sportsman5 extends Human5 {
// 重写final方法
public void age() {
// 代码
}
}
public class Test {
public static void main(String[] args) {
// 创建Sportsman5类的实例对象
Sportsman5 b = new Sportsman5();
}
}
运行结果如下图所示。

图 1 运行结果
由运行结果可知,使用关键字 final 修饰的 age() 方法被重写后,编译会报错。
除此之外,使用关键字 final 修饰的类无法再被继承。使用关键字 final 修饰的类无法被任何类继承,也就是说,既无法派生子类,又无法进行任何改动。下面用一个实例为例来说明。
【实例】使用关键字 final 修饰类。
final class Human6 {
// 代码
}
class Sportsman6 extends Human6 {
// 代码
}
public class Test {
public static void main(String[] args) {
// 创建Sportsman6类的实例对象
Sportsman6 b = new Sportsman6();
}
}
运行结果为:
无法从最终chapter5.Human6进行继承
由运行结果可知,程序报错信息显示无法从最终父类 Human 继承,因为 Human 类使用关键字 final 修饰。由此可知,使用关键字 final 修饰的类无法再被继承。
ICP备案:
公安联网备案: