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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© d342784178 中级黑马   /  2015-1-30 13:39  /  706 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//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段代码的结果是怎么得到的吗?
}

1 个回复

倒序浏览
对于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


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