final变量编译时期就确定具体值

    final变量编译时期就确定具体值,是什么意思呢?

    当final修饰变量是基本数据类型以及Stirng类型是,如果在编译器就能知道他的确切的值,则编译器会把它当做编译期常量使用,也就是说在用到该final变量的地方,相当于直接访问的这个常量。

    在项目中,可能会遇到这种情况,在调用一个pubUtil中的某一个方法时,由于其中引用了我们修改的一个propertyName接口/类定义文件,这里面的变量是final的,但是我们并没有对pubUtil做任何修改,这时,我们发现调用pubUtil中的方法时,引用propertyName中的值还是以前的。这时,就需要将pubUtil重新编译。

案例如下:

//--定义一个公共类--//
package com.cn.test;

public class propertyName {
	/**定义一个final变量*/
	public static final String strName = "我是final";
	
	public static String strNamenew = "我不是final";
	
	static {
        System.out.println("大家好,我进来了");
    }
}

//--测试类--//
public class testFinalDemo{
	public static void main(String[] args) {
        String str = propertyName.strName;//调用final
        System.out.println(str);
        //----上面输出结果:我是final-----//
        String str1 = propertyName.strNamenew;
        System.out.println(str1);
        //----上面输出结果:大家好,我进来了-----//
       //------------------我不是final---------//
	}
}

    我们发现,调用final变量并没有导致propertyName类中的静态块执行。实际上,我们引用的propertyName.strName,在编译期就已经确定为“我是final”常量了。这也是为什么,我们改动项目中propertyName接口/类中的final属性时,要将其重新编译的原因。

    下面使用反编译工具看下:

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穆瑾轩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值