您的位置:首页 >final类特点及使用详解
发布于2026-04-13 阅读(0)
扫一扫,手机访问
final类不能被继承,这是Java编译期强制限制;其方法默认不可重写,但无需显式加final;可正常实例化、实现接口、含非final字段;设为final旨在保障不可变性与安全,而非单纯防扩展。

Java中用 final 修饰一个类,最直接、不可绕过的特性就是:它**无法被任何其他类继承**。编译器会在编译期就报错,而不是运行时抛异常。
final class SecureConfig { /* ... */ }
class MyConfig extends SecureConfig { /* 编译失败:Cannot inherit from final 'SecureConfig' */ }public、甚至父类没写任何方法——只要加了 final,继承就彻底禁止因为没有子类,所以所有实例方法天然失去被覆盖(override)的可能。JVM和编译器会把它们当作“事实上的 final 方法”处理,但你**不需要、也不应该**给每个方法都加上 final 关键字。
public final void save() { ... } 在 final 类里毫无意义final 完全不影响行为,只是语义提醒private 方法本来就不可见、不可继承,也等价于 final,但和 final 类无关很多人误以为 final 类 = “完全冻结”,其实它只锁住继承这一条路,其他一切照常。
new 创建对象:String s = new String("hello"); —— String 是 final 类,但完全可实例化final class Logger implements Runnable {
public void run() { System.out.println("logging..."); }
}final,也可以不是:private int counter; 合法;但若要保证不可变性,得自己把字段也声明为 final这不是为了“防扩展”而扩展,而是防止恶意或意外破坏核心契约。比如 String 的哈希值缓存、字符串池、== 和 .equals() 行为,全都建立在“内容永不改变”这个前提上。
String,子类就能覆写 charAt() 或 length(),导致 HashMap 查找失效、序列化错乱、甚至绕过安全检查Math、Collections 设为 final,是为了避免子类偷偷修改 max() 或 unmodifiableList() 的逻辑final 是低成本高收益的安全加固真正容易被忽略的一点:final 类不等于不可变类。你可以定义一个 final 类,里面全是可变字段(比如 ArrayList 字段),它依然能被外部修改。要实现不可变,还得配合 final 字段 + 私有构造 + 不暴露可变对象引用。
上一篇:搜狗输入法皮肤透明度设置方法
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9