码农每日一题
长按关注置顶
工作日每天推送一个短小精干的技术知识点,让您可以随时查漏补缺。
问:下面程序的运行结果是什么?为什么?
classSingleTon{
privatestaticSingleTonsingleTon =newSingleTon();
publicstaticintcount1;
publicstaticintcount2 =0;
privateSingleTon() {
count1++;
count2++;
}
publicstaticSingleTongetInstance() {
returnsingleTon;
}
}
publicclassDemo{
publicstaticvoidmain(String[] args) {
SingleTonsingleTon =SingleTon.getInstance();
System.out.println("count1="+ singleTon.count1);
System.out.println("count2="+ singleTon.count2);
}
}
答:结果如下。
count1=1
count2=0
原因为 SingleTon singleTon = SingleTon.getInstance(); 调用了类的静态方法,所以触发类的初始化,类加载的时候在准备过程中为类的静态变量分配内存并初始化默认值 singleton=null,count1=0,count2=0,类初始化时为类的静态变量赋值和执行静态代码快,singleton 赋值为 new SingleTon() 调用类的构造方法,调用类的构造方法后 count=1 且 count2=1,继续为 count1 与 count2 赋值,此时 count1 没有赋值操作,所有 count1 为 1,但是 count2 执行赋值操作就变为 0。
相关推荐:
放松一下,顺带评论点赞分享一波~
无聊中,给小姨子发了一个心理测试题:“假如我们两个人流落到荒岛,你会做些什么?”。她的回答很吓人:“她说要截屏告诉她姐!”