java final

总结
final关键字是我们经常使用的关键字之一,它的主要用法有以下四种:

  1. 用来修饰数据,包括成员变量和局部变量,该变量只能被赋值一次且它的值无法被改变。对于成员变量来讲,我们必须在声明时或者构造方法中对它赋值;
  2. 用来修饰方法参数,表示在变量的生存期中它的值不能被改变;
  3. 修饰方法,表示该方法无法被重写;
  4. 修饰类,表示该类无法被继承。
### Java 中 `final` 关键字的用法 #### 变量 当将 `final` 应用于变量时,表示该变量一旦初始化后其值不可更改。对于基本数据类型的变量来说,这意味着它的值固定不变;而对于对象引用型变量,则意味着不能再指向其他对象实例,但可以通过方法改变原有对象的内容。 ```java // 基本类型示例 final int number = 10; number = 20; // 编译错误: Cannot assign a value to final variable 'number' // 对象引用示例 final StringBuilder sb = new StringBuilder("Hello"); sb.append(" World"); // 正确:修改了原对象的状态 sb = new StringBuilder("Java"); // 错误:尝试重新赋值给新的StringBuilder实例 [^1] ``` #### 方法 如果一个方法被声明为 `final` ,那么它就不能在其子类中被覆盖(overridden)。此特性有助于防止意外或不希望的行为发生,并且许多核心库中的方法都是这样设计来保持稳定性的。 ```java class Parent { public final void show() { // 这是一个最终方法 System.out.println("Parent's Show Method"); } } class Child extends Parent { @Override public void show() { // 尝试覆写会引发编译期错误 super.show(); System.out.println("Child's Show Method"); } } ``` 上述例子中试图重载父类里的`show()`函数将会失败因为它是定义成最后的方法[^2]. #### 类 标记整个类作为 `final` 表明这个类不允许有任何派生类继承自它。这样做通常是为了保护类的设计意图不受破坏或者出于效率考虑而做出的选择。 ```java public final class FinalClassExample{ private String message; public FinalClassExample(String msg){ this.message=msg; } public void displayMessage(){ System.out.println(message); } } // 下面这段代码会产生编译器报错,因为我们无法扩展FinalClassExample. /* class SubClassOfFinal extends FinalClassExample{ // Error: The type SubClassOfFinal cannot subclass the final class FinalClassExample }*/ ``` ### 性能与安全性考量 使用 `final` 不仅提供了逻辑上的保障,在某些情况下还可能带来运行时性能提升。这是因为 JVM 和 JIT 编译器能够利用这些额外的信息来进行更激进的优化操作。 尽管如此需要注意的是随着版本更新像Java9引入了一些新特性和改进比如增强字符串连接处理方式等可能会间接影响到我们如何有效运用final关键字达到最佳实践效果[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值