当前位置: 首页 > news >正文

Java final关键字

    可以修饰类、属性、方法和局部变量。

何时使用:

1、不希望某个类被继承,用final修饰该类。

2、不希望父类的某个方法被子类覆盖/重写,用final修饰该方法。

3、不希望类的某个属性的值被修改,用final修饰该属性。

4、不希望某个局部变量被改变,用final修饰。

Java中final和static修饰的变量是在什么时候赋值的?_程序IT圈的博客-CSDN博客

链接中的总结单拎出来:

①单独用final修饰的变量也有可能在字节码找到对应的ConstantValue属性,但是会被JVM忽略掉。

②final修饰的实例属性,在实例创建的时候才会赋值。

③static修饰的类属性,在类加载的准备阶段赋初值,初始化阶段赋值。

④static+final修饰的String类型或者基本类型常量,JVM规范建议在初始化阶段赋值,但是HotSpot VM直接在准备阶段就赋值了。

⑥static+final修饰的其他引用类型常量,赋值步骤和第二点的流程是一样的。?

细节:

1、局部变量使用final修饰,它的值不允许改变,即:

     如果是基本数据类型,则不允许值改变。

     如果是引用类型,它的值就是地址,只要地址不变就行,指向的对象自身属性可以改变。

2、final修饰的属性也叫常量,一般用XX_XX_XX来命名。

3、final修饰的属性定义时必须赋初值,以后不可修改,可在以下时刻赋初值:

    ①定义时。

    ②构造器中。

    ③代码块中。

4、若final修饰的属性是静态的(static) ,则只能在以下赋初值,不能在构造器赋初值。

    ①定义时。

        定义时直接赋值,赋值操作将会在类加载的准备阶段就赋值完毕。

            好处:可以让代码更加简洁

            坏处:如果赋值的操作比较耗时,就会影响类的加载速度。

    ②代码块。(前提是不能在定义时赋值)

         常量的初始化被延迟到静态代码块执行时,即初始化阶段。

             可以在需要复杂操作时实现更好的控制,而且可以在静态代码块中捕获异常。

5、final不能修饰构造方法。

6、final + static往往搭配使用,效率高,不会导致类加载,底层编译器做了优化。

    

7、方法形参也可以使用final修饰。

相关文章:

  • AI在肿瘤学临床决策中的应用:一种多模态方法
  • Web3 知识体系架构图
  • Unix环境高级编程--8-进程控制---8.1-8.2进程标识-8.3fork函数-8.4 vfork函数
  • 【Linux】使用AddressSanitizer分析内存非法使用问题
  • docker不删除容器更改其挂载目录
  • Django学习
  • JavaScript-JavaWeb
  • 用Python实现办公自动化
  • 《庆余年算法番外篇》:范闲通过最短路径算法在阻止黑骑截杀林相
  • 数据结构——二叉树的实现
  • 学习笔记——交通安全分析02
  • C++Qt操作Lotus Domino数据库 Lotus Domino C++连接Lotus Domino C++快速开发Lotus Domino
  • 力扣:104. 二叉树的最大深度
  • GPT-4你了解多少呢
  • 前端开发工程师——AngularJS
  • Three.js 入门介绍与环境搭建
  • 长方形边框 上方中间有缺口 css
  • microk8s 报错tls: failed to verify certificate: x509:
  • 全文最详细的生产管理完整方案!那些让人头疼的生产管理难题及解决方法!
  • 基于匹配追踪和最大重叠离散小波变换的ECG心电信号R波检测(MATLAB 2018a)
  • 五一去哪儿| 追着花期去旅行,“赏花经济”绽放文旅新活力
  • 新型算法助力听障人士听得更清晰
  • 上海国际咖啡文化节开幕,北外滩集结了超350个展位
  • “铁血防守”制造8年最快丢球,恐惧中的阿森纳什么也做不了
  • 上海市十六届人大常委会第二十一次会议表决通过有关人事任免事项
  • 69岁朱自强被查,曾任南京地铁总经理