黑马程序员技术交流社区

标题: 分享一道题目 [打印本页]

作者: 廖成    时间: 2013-1-26 23:33
标题: 分享一道题目
  1. class SingleTon {
  2.    
  3.     private static SingleTon singleTon = new SingleTon();
  4.    
  5.     public static int a;
  6.    
  7.     public static int b = 0;
  8.    
  9.     private SingleTon () {
  10.         
  11.         a++;
  12.         b++;
  13.     }
  14.    
  15.     public static SingleTon getInstance() {
  16.         
  17.         return singleTon;
  18.     }
  19. }

  20. public class Test {
  21.    
  22.     public static void main(String[] args) {
  23.         
  24.         SingleTon singleTon = SingleTon.getInstance();
  25.         
  26.         System.out.println(" a is "+singleTon.a);
  27.         System.out.println(" b is "+singleTon.b);
  28.     }
  29.    
  30. }
复制代码
求接输出结果:


答案及分析:
输出结果是:
a is 1
b is 0

分析:SingleTon 类是一个单例类,当在程序入口main方法中获得SingleTon 实例的时候,jvm会初始化所有静态变量,SingleTon = null,int a会赋值0,int b也会赋值0,然后SingleTon = new SingleTon(),在构造方法中a++,b++,a=1;b=1。程序这时候再往下执行,到了输出,调用a,这时候a没有被再次赋值,所以a就是1,但是b被再次赋值了b=0,所有b就是0 了。输出结果就是上面的结果。


作者: 冉世友    时间: 2013-1-27 22:42
嗯,听清楚的~




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