黑马程序员技术交流社区

标题: 求大神解决 [打印本页]

作者: d342784178    时间: 2015-1-30 13:39
标题: 求大神解决
//code_1  
public class SingleInstance {  
    private static SingleInstance si = new SingleInstance();    //注意这里  
    public static int num_1;  
    public static int num_2 = 0;  
      
    public SingleInstance() {  
        num_1 ++;  
        num_2 ++;  
    }  
      
    public static SingleInstance getInstance() {  
        return si;  
    }     
      
    public void print() {  
        System.out.println(num_1 + ":" + num_2);  
    }  
      
    public static void main(String[] args) {  
        SingleInstance.getInstance().print();  
    }  
      
}  
  结果: 1:1          1:0
  
//code_2  
public class SingleInstance {  
    public static int num_1;  
    public static int num_2 = 0;  
    private static SingleInstance si = new SingleInstance();    //注意,跟上面不一样了  
      
    public SingleInstance() {  
        num_1 ++;  
        num_2 ++;  
    }  
      
    public static SingleInstance getInstance() {  
        return si;  
    }     
      
    public void print() {  
        System.out.println(num_1 + ":" + num_2);  
    }  
      
    public static void main(String[] args) {  
        SingleInstance.getInstance().print();  
    }  
        结果: 1:1          1:1
}  //code_3
public class SingleInstance {  
    private static SingleInstance si = new SingleInstance();    //注意这里  
    public  int num_1;  
    public  int num_2 = 0;  
      
    public SingleInstance() {  
        num_1 ++;  
        num_2 ++;  
    }  
      
    public static SingleInstance getInstance() {  
        return si;  
    }     
      
    public void print() {  
        System.out.println(num_1 + ":" + num_2);  
    }  
      
    public static void main(String[] args) {  
        SingleInstance.getInstance().print();  
    }  
        结果: 1:1          1:1
能给分析一下上面3段代码的结果是怎么得到的吗?
}

作者: d342784178    时间: 2015-1-30 13:40
对于code_1和code_2
我的理解是

在code_1中
编译期间对num_1 num_2 SingleInstance 进行了默认初始化
然后开始运行
因为java按自上而下的顺序运行
所以先执行了构造方法 num1++,num2++ 并输出了1:1
然后执行了num2=0; 再调用print()方法 输出了1:0

而在code_2中
先执行了num2=0 再调用构造方法输出1:1
再调用构造方法输出了1:1


不知道对不对




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