开发者社区> 问答> 正文

java单例初始化为什么不一直循环初始化的问题

程序很简单:

 public class User {
    static User u=new User();
    public static User getUser(){
        return u;
    }

    User01 u01=User01.getUser01();

    public User(){
        System.out.println("User新建一次");
    }

}

public class User01 {
     static User01 u01=new User01();
    public static User01 getUser01(){
        return u01;
    }

    User u=User.getUser();

    public User01(){
        System.out.println("User01新建一次");
    }
}

public class Test {
    public static void main(String[] args) {
        User u=User.getUser();
        User01 u01=User01.getUser01();
            System.out.println(u.u01);
        System.out.println(u01.u);
    }
}

接着我运行test的main函数,得到结果如下:
User01新建一次
User新建一次
User01@40ac8360
null
为什么会有这个结果?为什么没有循环地一直初始化下去呢?为什么最后的u01.u是空指针呢?跪求大神解释一下整个程序运行过程中到底发生了什么?

展开
收起
蛮大人123 2016-06-03 14:38:02 2298 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    因为你把对象的初始化以静态的方式写了,所以不会每次调用都去new一下那个对象。这个涉及到了类的初始化顺序,其顺序是(静态变量、静态初始化块)>(变量、初始化块)>构造器,User类中调用构造方法前,已经提前调用了User01 u01=User01.getUser01();这句代码,因此会导致User01先输出。

    2019-07-17 19:26:37
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载