public class Singleton {
private static int x= 0;
private static int y;
private static Singleton instance = new Singleton();
private Singleton(){
x++;
y++;
}
private static Singleton getInstance(){
return instance;
}
public static void main(String[] args) {
Singleton singleton = Singleton.getInstance();
System.out.println(singleton.x);
System.out.println(singleton.y);
}
}
这是一段单例模式的代码,声明了两个静态变量x赋值0,y没有赋值,那么打印的结果是什么?
x = 0, y = 0, instance = null
x = 0, y = 0, instance = new Singleton()
y没有手动赋值,所以赋值为0
按照顺序的执行方式,new Singleton()会执行构造方法,x和y自增1
所以输出的结果为 x = 1, y = 1.
如果调换代码的顺序会输出什么呢?
private static Singleton instance = new Singleton();
private static int x= 0;
private static int y;
instance = null,x = 0, y = 0
类的初始化阶段,为每个变量正确赋值,因为代码顺序的改变,首先会执行new Singleton()的构造方法,x和y自己自增
x = 1,y =1;
x = 0
由于y没有给定初始值,y的值就是构造函数中得到的值
最终结果:
x = 0, y = 1
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
加入交流群
请使用微信扫一扫!