🎊 Java 中的 final 关键字详解:作用、场景与常见误区一网打尽!

Java 中的 final 关键字详解:作用、场景与常见误区一网打尽!

🚩 final 的四大作用分类详解

✅ 一、修饰变量(局部变量、成员变量、静态变量)

含义:该变量一旦被赋值,就不能再次修改。

🧪 示例:

final int x = 10;

x = 20; // ❌ 编译错误:无法为 final 变量赋值

✅ 场景应用:

用于定义常量(配合 static):public static final String APP_NAME = "MyApp";

在 lambda 表达式或匿名类中,必须是 final 或等效 final 的变量才能访问外部变量。

🧠 面试陷阱:

Q:final 修饰引用类型变量(对象)是否代表这个对象不能变?

❌ 错误,只能保证引用地址不变,但对象内容是可以改的!

final List list = new ArrayList<>();

list.add("hello"); // ✅ 可以修改内容

list = new ArrayList<>(); // ❌ 不可以重新赋值引用

✅ 二、修饰方法

含义:该方法不能被子类重写(Override)

🧪 示例:

class Parent {

public final void show() {

System.out.println("父类方法");

}

}

class Child extends Parent {

// public void show() { } // ❌ 报错:不能重写 final 方法

}

✅ 场景应用:

用于框架设计中,提供稳定模板方法:

比如 Spring 中某些生命周期方法就是 final,防止被随意更改。

提高安全性、防止被子类恶意修改逻辑。

✅ 三、修饰类

含义:该类不能被继承

🧪 示例:

public final class MyFinalClass {

// ...

}

class Sub extends MyFinalClass { } // ❌ 编译错误:无法继承 final 类

✅ 场景应用:

String、Integer、Math 等核心类都是 final 的,保证其不可被篡改。避免敏感逻辑被子类篡改,例如加密库、工具类库。

✅ 四、修饰形参(Java 8 引入)

含义:该参数在方法体内不可被重新赋值

🧪 示例:

public void doSomething(final String msg) {

// msg = "new value"; // ❌ 报错:不能重新赋值

}

✅ 场景应用:

提高代码可读性,让调用者明确知道此参数只读。常见于回调、匿名类、Lambda 中参数保护。

📘 总结对比表

使用位置作用是否可修改常见用途变量(基本类型)值不可变❌ 不可重新赋值常量、不可变参数变量(引用类型)引用不可变✅ 对象可改,引用不可变防止指针篡改方法不可被重写✅ 子类仍可继承模板方法、安全性类不可被继承✅ 类内方法可用不可扩展工具类、安全类方法参数形参只读❌ 不可在方法体内改提升代码规范

🧠 面试高频问题精炼

final 和 finally、finalize 的区别?

final:关键字,表示不可变;finally:异常处理中的块,始终执行;finalize():对象回收前调用的方法,已过时 ❌。

final 引用类型可以改内容吗?

✅ 可以修改对象内部内容,只不能重新赋值引用。

final 能不能和 static、abstract、private 联用?

✅ 可与 static 联用(如常量)❌ 不可与 abstract 联用(矛盾)✅ 可与 private 联用(常见于工具类方法)

🎯 相关推荐

1299美元兑换人民币
bt365官网哪个真的

1299美元兑换人民币

📅 06-28 👀 6090
wpsoffice怎么放到白板上
bt365官网哪个真的

wpsoffice怎么放到白板上

📅 10-03 👀 5773
醋泡蒜会变绿色的原因是什么(为什么醋浸大蒜后,大蒜会变绿色?)