前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >final 关键字的用法

final 关键字的用法

作者头像
繁依Fanyi
发布2024-10-28 08:29:10
发布2024-10-28 08:29:10
11200
代码可运行
举报
运行总次数:0
代码可运行

在 Java 中,final 关键字具有多种用途,主要用于限制变量、方法和类的可修改性。了解这些用法有助于提高代码的安全性和可维护性。

1. 声明常量

final 可以用于变量声明,表示该变量只能被赋值一次。一旦赋值,变量的值就不能再改变,通常用于定义常量。

示例代码:

代码语言:javascript
代码运行次数:0
复制
final int MAX_VALUE = 100;
// MAX_VALUE = 200; // 编译错误,不能改变常量值
2. 方法不能被重写

在方法前加上 final 关键字,可以防止该方法在子类中被重写。这在设计类时,可以确保某些方法的行为不被改变。

示例代码:

代码语言:javascript
代码运行次数:0
复制
class Parent {
    final void display() {
        System.out.println("This is a final method.");
    }
}

class Child extends Parent {
    // void display() { // 编译错误,不能重写父类的 final 方法
    //     System.out.println("Trying to override.");
    // }
}
3. 类不能被继承

final 关键字用于类声明,表示该类不能被继承。这通常用于确保类的实现不被改变,常见于设计单例模式。

示例代码:

代码语言:javascript
代码运行次数:0
复制
final class Utility {
    static void helperMethod() {
        System.out.println("Utility method.");
    }
}

// class ExtendedUtility extends Utility { // 编译错误,不能继承 final 类
// }
4. 引用不可变

在对象的情况下,将引用变量声明为 final,意味着这个引用不能再指向其他对象,但对象本身的内容仍然可以被修改。这在处理不可变对象时非常有用。

示例代码:

代码语言:javascript
代码运行次数:0
复制
final List<String> myList = new ArrayList<>();
myList.add("Hello");
// myList = new ArrayList<>(); // 编译错误,不能改变引用
5. 性能优化

final 修饰的方法,JVM 会尝试将其内联,以提高运行效率。这意味着在调用该方法时,JVM 可能直接将方法体嵌入调用位置,从而减少方法调用的开销。

6. 编译期常量

final 修饰的常量在编译阶段会存入常量池中,从而提高程序的执行效率。

7. 编译器重排序规则

对于 final 域,编译器遵循两个重排序规则:

  • 在构造函数内对一个 final 域的写入与随后将该对象的引用赋值给其他引用变量的操作之间,不能重排序。
  • 初次读一个包含 final 域的对象的引用与随后初次读该 final 域的操作之间,不能重排序。这一特性确保了线程安全性,有助于在多线程环境下保证可见性。

final 关键字在 Java 中具有重要的作用,可以用来声明常量、限制方法重写、防止类继承、管理引用的不可变性,以及优化性能。合理使用 final 可以提高代码的安全性、可读性和设计的清晰性,帮助开发者维护代码的稳定性。此外,final 相关的特性和重排序规则也是许多面试中的热门话题,掌握这些内容有助于在面试中取得好成绩。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 声明常量
  • 2. 方法不能被重写
  • 3. 类不能被继承
  • 4. 引用不可变
  • 5. 性能优化
  • 6. 编译期常量
  • 7. 编译器重排序规则
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档