黑马程序员技术交流社区

标题: 大家帮我看一下代码,关于运行结果的问题。 [打印本页]

作者: 李盈科    时间: 2012-1-7 21:45
标题: 大家帮我看一下代码,关于运行结果的问题。
本帖最后由 李盈科 于 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. }
复制代码

作者: zl918    时间: 2012-1-7 22:21
哥们不按常理出牌啊。。属性公有的。。
首先,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();上面,结果就变了。

作者: zl918    时间: 2012-1-7 22:59
1. 代码的执行顺序,代码在前的先执行;
2. 静态成员初始化语句要先于静态构造函数执行;
3. 静态成员初始化语句与静态构造函数只执行一次。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2