【Java】final

final

final可以用来修饰的结构:类、方法、变量

final 用来修饰一个类:此类不能被其他类所继承。
比如:String类、System类、StringBuffer类

final 用来修饰方法:表明此方法不可以被重写
比如:Object类中getClass();

final 用来修饰变量:此时的"变量"就称为是一个常量

final修饰属性:可以考虑赋值的位置有:显式初始化、代码块中初始化、构造器中初始化

final修饰局部变量:尤其是使用final修饰形参时,表明此形参是一个常量。当我们调用此方法时,给常量形参赋一个实参。一旦赋值以后,就只能在方法体内使用此形参,但不能进行重新赋值。

static final 用来修饰属性:全局常量

### Java 中 `final` 关键字的使用场景及规则 #### 1. 类层面 当声明一个类为 `final` 时,表示该类不能再被其他类继承。这种特性通常用于定义一些核心的基础类或者工具类,防止其功能被意外扩展或篡改。例如,在 JDK 的标准库中,许多基础类如 `String` 和部分包装类(如 `Integer`, `Boolean` 等)都被标记为 `final`,以确保它们的行为不会因继承而改变[^3]。 ```java // 定义一个不可被继承的类 public final class FinalClass { public void display() { System.out.println("This is a final class."); } } ``` #### 2. 方法层面 如果在一个类中将某些方法声明为 `final`,则这些方法无法在子类中被重写(Override)。这有助于保护特定的功能逻辑不被更改,从而提升代码的安全性和稳定性。特别是在多线程环境中,这种方法可以有效避免由于方法行为变化而导致的竞争条件或其他并发问题[^4]。 ```java class Parent { public final void show() { // 此方法不能被重写 System.out.println("Final method in parent class"); } } class Child extends Parent { @Override public void show() { // 编译错误:试图覆盖最终方法 System.out.println("Trying to override final method"); } } ``` #### 3. 变量层面 对于变量而言,`final` 主要用来创建常量。一旦赋值完成,`final` 声明的变量就不能再重新分配新的值。需要注意的是,如果是基本数据类型的变量,则整个数值保持不变;而对于引用类型的数据结构来说,虽然指针本身不可变,但其所指向的对象内部状态仍可能发生变化[^1]。 - **基本数据类型** ```java final int MAX_VALUE = 100; // 不允许再次修改MAX_VALUE的值 System.out.println(MAX_VALUE); ``` - **引用数据类型** ```java final StringBuilder sb = new StringBuilder("Initial Value"); sb.append(", Modified!"); // 合法操作,因为只是改变了对象的内容而非替换对象本身 System.out.println(sb.toString()); // 输出:"Initial Value, Modified!" ``` #### 4. 局部变量 除了成员变量外,还可以把函数内的局部变量设置成 `final` 形式来约束它的生命周期只限于此作用域范围内,并且仅能初始化一次之后便固定下来不再变动。 ```java void testMethod(){ final int localVar = 5; System.out.println(localVar); // 下面这条语句会报错,因为localVar已经被声明为final并赋予初始值 // localVar = 10; } ``` #### 规则总结 - 被指定为 `final` 的实体具有不可变更性。 - 应用到不同上下文中分别代表不同的含义——阻止派生、锁定实现细节以及确立恒定关系等。 - 需要注意区分原始型态与复合型态下应用的区别之处。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值