A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 李盈科 于 2012-1-8 10:39 编辑

为什么运行结果是 1 和0???
  1. public class SingletonDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Singleton singleton = Singleton.getInstance();
  6.                
  7.                 System.out.println(singleton.number1);
  8.                 System.out.println(singleton.number2);
  9.         }
  10. }
  11. class Singleton
  12. {
  13.         private static Singleton singleton = new Singleton();
  14.         public static int number1;
  15.         public static int number2 = 0;
  16.        
  17.        
  18.         private Singleton()
  19.         {
  20.                 number1++;
  21.                 number2++;
  22.         }
  23.        
  24.         public static Singleton getInstance()
  25.         {
  26.                 return singleton;
  27.         }
  28. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

3 个回复

倒序浏览
哥们不按常理出牌啊。。属性公有的。。
首先,number1自动赋值为0;
然后程序运行顺序的问题,singleton 首先调用getInstance()方法,getInstance()方法又调用构造函数,这时number1、number2都为0,执行完构造函数都自增1,但是,这时,会调用一次public static int number2 = 0;但没有调用public static int number1;至于为什么,我在这里就不说了(其实我也不知道),所以就输出1,0了。
要是把public static int number1;
        public static int number2 = 0 放在private static Singleton singleton = new Singleton();上面,结果就变了。
回复 使用道具 举报
1. 代码的执行顺序,代码在前的先执行;
2. 静态成员初始化语句要先于静态构造函数执行;
3. 静态成员初始化语句与静态构造函数只执行一次。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马