Java final 修饰符

深入理解Java中的final关键字及其实现机制
本文详细解析了Java中final关键字在字段、变量、形参、方法及类层面的应用及其特性,包括final字段、final方法、final类的使用规则与优化策略,帮助开发者掌握final机制在提高代码安全性、提升程序效率方面的关键作用。

6.8 P153-158

一、final 字段、变量、形参;在使用前必须初始化,初始化之后不能被修改

1. 对于基本数据类型,值不能被修改;对于引用类型,不能指向其他的对象,但对象本身可以被修改,数组引用也是如此

2. 有的在编译期就确定值,如 final int num1 = 2;有的在运行期才确定值,如 final int num2 = (int)(Math.random() * 20)

3. 对于定义时未初始化的final字段,在构造方法中必须对其进行初始化;接口内定义的字段自动式 static final 的,且必须在定义时初始化

4. 使用 final 修饰的方法的形参,在方法内部不能被修改


二、 final 方法

1. 防止方法在子类中被覆盖、重写(不能在子类中定义具有相同方法名、形参列表的方法)

2. 编译器对于代码量较小的 final 方法,在调用方法的地方,会进行方法体代码嵌入,而非方法调用的方式,减少方法调用的开销

3. private 修饰的方法,自动添加 final 修饰,但在子类中可定义同名、同形参列表的方法;此举应该是为了获得方法体代码嵌入的方式

4. Java 中的方法,除 final 方法外,其他的方法都采用动态绑定方式


三、final 类

1. final 类将不能被继承

2. final 类的字段与普通类一样,可以设成 final,也可不设

3. 由于不存在被覆盖、重写的可能,final 类的所有方法,将默认设为 final,从而使用方法体代码嵌入的方式,获得效率的提升

### Java `final`修饰符功能和用法 #### 变量 当`final`用于变量时,意味着一旦赋值就不能再改变其指向的对象或基本类型的值。对于对象引用来说,这表示不能再让该引用指向另一个对象实例;但对于原始数据类型,则是数值本身不可更改。 例如,在接口中的成员变量默认具有`static final`特性[^1]: ```java interface Constants { int MAX_COUNT = 10; // 默认为 public static final } ``` #### 方法参数 如果希望防止方法内部修改传入的参数,可以将其声明为`final`。这样做有助于保护输入不被意外篡改并提高代码的安全性和可读性。 ```java public void setFinalValue(final String value){ // 下面这一行会报错因为尝试改变了最终形参value // value = "changed"; } ``` #### 类 定义成`final`的类不允许任何子类继承它。这样做的好处是可以阻止其他开发者扩展此类的行为,从而确保某些核心实现不会因不当重写而破坏原有逻辑。 ```java final class FinalClassExample{ } // 编译错误:无法继承自final类 //class SubClass extends FinalClassExample{} ``` #### 方法 标记为`final`的方法不能在派生类里被覆盖(即覆写)。这对于那些不应该由后代变更的关键操作特别有用,比如安全敏感的操作或是框架的核心机制。 ```java class Base { final void show() { System.out.println("Base"); } } class Derived extends Base { // 尝试覆写show方法会导致编译失败 // @Override // void show(){System.out.println("Derived");} } ``` 通过上述介绍可以看出,`final`关键字提供了多种方式来增强程序设计上的灵活性以及安全性,同时也促进了更好的编码实践。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值