栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java静态final域在被初始化之前可能被访问

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java静态final域在被初始化之前可能被访问

public class Elvis {
    public static final Elvis INSTANCE = new Elvis();
    private final int beltSize;
    private static final int CURRENT_YEAR = Calendar.getInstance().get(Calendar.YEAR);      // 0,正确的结果应该是:2022

    private Elvis() {
        beltSize = CURRENT_YEAR - 1930;     // static final 类型静态域被初始化之前可能被读取,读到的结果是0,本应该是当前年份
    }

    public int beltSize() {
        return beltSize;
    }

    public static void main(String[] args) {
        System.out.println("Elvis wears a size " + INSTANCE.beltSize() + " belt.");
    } 
}

问题现原因:INSTANCE在CURRENT_YEAR之前被初始化了。

解决方法:

    private static final int CURRENT_YEAR = Calendar.getInstance().get(Calendar.YEAR);      // 0,解决方法:CURRENT_YEAR放到上面去
    public static final Elvis INSTANCE = new Elvis();

调整初始化顺序,让被依赖的项优先初始化。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/763811.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号