public class Singleton {
(1)private static Singleton obj = new Singleton();
(2)public static int counter1;
(3)public static int counter2 = 1;
(4)private Singleton(){
counter1++;
counter2++;
}
(5)public static Singleton getInstance(){
return obj;
}
}public class MyMain { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
Singleton obj = Singleton.getInstance();
System.out.println("obj.counter1=="+obj.counter1);
System.out.println("obj.counter2=="+obj.counter2); }}请说出(1)(2)(3)(4)(5)的运行顺序和运行结果,并说出原因

解决方案 »

  1.   

    你自己试一下嘛,主要的差别在于,那个变量初始化和构造函数里面的处理的先后次序。1. counter2++; 这句执行时 counter2 已经初始化之前成了0还是1?
    2. Singleton obj = 写在 counter2 之前和之后有没有差别?
      

  2.   

    (1)private static Singleton obj = new Singleton();
    (2)public static int counter1;     初始默认为0
    (3)public static int counter2 = 1;(1)(2)(3)程序初始的时候就对应赋值 
    (3)实例化了。。调用(4)private无参构造函数
    所以counter1 = 1;  counter2 = 2
    (5)只是返回一个Singleton地址  
      

  3.   

    这个程序的运行顺序是(5)(1)(4)(2)(3)在使用单例模式的时候首先用到的是getInstance方法,所以程序会先找getInstance方法,getInstance方法里有obj,然后再找obj,private static Singleton obj = new Singleton();,所以再找Singleton构造方法,Singleton方法里又有两个变量counter1,counter2,最后是找这两个变量counter1和counter2