public class SingletonTest {
private static SingletonTest singleton = new SingletonTest();
private SingletonTest(){
System.out.println("构造函数调用");
}
public static SingletonTest getInstance(){
return singleton;
}
public static void main(String[] args) {
SingletonTest single = SingletonTest.getInstance();
SingletonTest single2 = SingletonTest.getInstance();
System.out.println(single == single2);
}
}
上面这段代码,输出结果为:构造函数调用
true但是不明白,类加载首先加载静态变量,明明两个对象是new了两次,为啥构造函数只调用了一次呢,求解
菜鸟,对类加载不太明了,期待高手指点,谢过了
private static SingletonTest singleton = new SingletonTest();
private SingletonTest(){
System.out.println("构造函数调用");
}
public static SingletonTest getInstance(){
return singleton;
}
public static void main(String[] args) {
SingletonTest single = SingletonTest.getInstance();
SingletonTest single2 = SingletonTest.getInstance();
System.out.println(single == single2);
}
}
上面这段代码,输出结果为:构造函数调用
true但是不明白,类加载首先加载静态变量,明明两个对象是new了两次,为啥构造函数只调用了一次呢,求解
菜鸟,对类加载不太明了,期待高手指点,谢过了
明明只有一个new嘛,所以只调用了一次构造方法啊SingletonTest single = SingletonTest.getInstance();
SingletonTest single2 = SingletonTest.getInstance();
这是静态方法的调用、调用静态方法不会调用构造方法的如果你的类的开头没有写
private static SingletonTest singleton = new SingletonTest();
而是
private static SingletonTest singleton = null;
的话,你这个程序连一次构造方法都不会调用到
搜遍了也只有一个new:
private static SingletonTest singleton = new SingletonTest();
是不是类加载只做一次,所以
private static SingletonTest singleton = new SingletonTest();只执行一次,
静态变量也只加载一次?
就是靠的这一半声明来的
你在类中声明了一个对象getInstance返回给你的就是这个对象
至于这个对象有没有实例化,那getInstance可不管楼主你把第一行改成
private static SingletonTest singleton;
试试就明白了就是没有实例化,它也一样返回给你
完全是因为你写了
private static SingletonTest singleton = new SingletonTest();
这叫变量声明(可以同时初始化)
JAVA程序执行时,会把main方法所在类的变量声明部分全部执行的