类不被加载

对于final类型的静态变量,如果该变量的值在编译期就可以确定下来,那么该静态变量相当于”宏变量”。Java编译器会在编译期直接将该变量出现的地方替换成它的值。因此即使程序使用该静态变量,也不会导致该类的初始化。

总结:使用在编译器就能够确定值的静态常量不会初始化类

 

示例代码

public class Share {

    static {

        System.out.println("loading Share");

    }

    public static final int share = 23;

}

public class Test {

    public static void main(String[] args) {

        System.out.println(Share.share);

    }

}

运行测试类,可以发现Share类没有被加载,而将关键字final去掉以后运行,则能看到加载Share类的输出语句。之所以会出现这种现象是因为,程序在使用的时候,并没有使用该静态变量,而是直接使用了常量。

反之,如果该静态常量的值在编译期间不能够确定,必须在运行时才能够确定,这个时候如果访问它,则会导致类的初始化。

 

示例代码

public class Share {

    static {

        System.out.println("loading Share");

    }

    public static final String CUR_TIME = System.currentTimeMillis() + "";

}

public class Test {

    public static void main(String[] args) {

        System.out.println(Share.CUR_TIME);

    }

}

这种情况之所以会导致Share类的初始化是因为Share类的CUR_TIME的值必须在运行时才能确定,所以Share类必须保留对于CRU_TIME变量的引用,这个时候CRE_TIME其实就称为了静态变量,而使用类的静态变量则会初始化类。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

会飞的王小卡

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

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

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

打赏作者

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

抵扣说明:

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

余额充值