一个奇怪的问题

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

朋友, 你对Java很熟吗? 来看看下面这段代码, 心里运行一次, 看看它的执行结果是什么?

class Singleton

{

private static Singleton obj = new Singleton();

public static int counter1;

public static int counter2 = 0;

private Singleton()

{

counter1++;

counter2++;

}

public static Singleton getInstance()

{

return obj;

}

}

// 程序2

public class MyMain

{

public static void main(String[] args)

{

Singleton obj = Singleton.getInstance();

System.out.println("obj.counter1=="+obj.counter1);

System.out.println("obj.counter2=="+obj.counter2);

}

}

想出来结果了吗? 那你把这段程序编译运行一下, 看看是不是你想的答案?

原理是这样的: JAVA在编译以后, 对静态变量并不马上进行赋值操作, 所以, 当你new一个实例的时候, counter1和counter2都被赋值为1(你用单步跟踪一次就可以知道了), 这时候, 要害的问题在于 private static Singleton obj = new Singleton(); 这条语句是在counter2的赋值之前. 因此, 当生成Singleton类的实例后, 也就是说构造器被执行之后, 才会去执行public static int count2=0, 这时候counter2又被清0了, 所以, 答案就是屏幕上输出:

obj.counter1==1

obj.counter2==0

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航