java声明静态可序列_java – 类中的静态字段初始化序列

当一个类有自己的静态实例时,我无法理解初始化顺序.此外,为什么这种行为似乎与String不同.

请参阅以下示例:

public class StaticCheck {

private static StaticCheck INSTANCE = new StaticCheck();

private static final List list =

new ArrayList(Arrays.asList("hello"));

private static final Map map =

new HashMap();

private static final String name = "hello";

public static StaticCheck getInstance() {

return INSTANCE;

}

private StaticCheck() {

load();

}

private void load() {

if(list != null) {

System.out.println("list is nonnull");

} else {

System.out.println("List is null");

}

if(name != null) {

System.out.println("name is nonnull");

} else {

System.out.println("name is null");

}

if(map != null) {

System.out.println("Map is nonnull");

} else {

System.out.println("Map is null");

}

}

public static void main(String[] args) {

StaticCheck check = StaticCheck.getInstance();

}

}

输出:

List is null

name is nonnull

Map is null

看看上面的例子,我的想法是:

>如上所述,静态字段在Java中的实例初始化之前初始化.这里,当我调用静态方法getInstance()时,它将导致类初始化,这意味着静态字段的初始化.在这种情况下,字段map和list不应为null.

>在上面的示例中,由于字段INSTANCE是静态的,因此其对象初始化发生,并且其构造函数在未初始化其他字段时调用load().因此,字段列表和映射为空.那么为什么名称会被初始化?我有点困惑.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值