java基础:使用final需要注意哪些事项?

2026-01-29 0 12,600

下面我们就来明确在变量中使用final的需要注意的规则,以及在局部和匿名类中关于使用final变量的特殊探讨,下面一起来看接下来的内容搞吧。

1.对于final变量,编译器和处理器都要遵守两个重排序规则

  • 构造函数内,对一个 final 变量的写入,与随后把这个被构造对象的引用赋值给一个变量,这两个操作之间不可重排序;

  • 首次读一个包含 final 变量的对象,与随后首次读这个 final 变量,这两个操作之间不可以重排序。

2.局部内部类和匿名内部类只能访问局部final变量

为了解决这个问题,我们先要去使用代码去验证一下。

public class Test {
    public static void main(String[] args)  {     
    }   
    //局部final变量a,b
    public void test(final int b) {
        final int a = 10;
        //匿名内部类
        new Thread(){
            public void run() {
                System.out.println(a);
                System.out.println(b);
            };
        }.start();
    }
}

原因是为什么呢?这是因为test()方法里面的参数a和b,在运行时,main线程快要结束,但是thread还没有开始。因此需要有一种机制,在使得运行thread线程时候能够调用a和b的值,怎么办呢?java采用了一种复制的机制,

也就说如果局部变量的值在编译期间就可以确定,则直接在匿名内部里面创建一个拷贝。如果局部变量的值无法在编译期间确定,则通过构造器传参的方式来对拷贝进行初始化赋值。

以上就是我们使用final在变量中需要注意的事项,如果忽略以上两点,很容易出现程序的报错,小伙伴们学习的时候需要留心。

推荐操作环境:windows7系统、java10版,DELL G3电脑。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:以上部本文内容由互联网用户自发贡献,本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。投诉邮箱:3758217903@qq.com

ZhiUp资源网 java教程 java基础:使用final需要注意哪些事项? https://www.zhiup.top/11206.html

相关