首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

一个比较疑惑的有关问题

2011-12-08 
一个比较疑惑的问题public class test {/** * @param args */public static void main(String[] args) {//

一个比较疑惑的问题

public class test {

/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
new A();
new A();
new A();
}
}
class A
{
public final static A a=new A();
static int b=0;
A()
{
System.out.println("我初始化了");
System.out.println(b);
b++;
}
}

控制台显示:

我初始化了
0
我初始化了
0
我初始化了
1
我初始化了
2
请问public final static A a=new A();
是什么时候运行的?为什么会有2个0?这段代码具体是怎么运行的?球高手帮个忙谢谢~!!

[解决办法]
我的理解是:
你开始java 包名.test时,加载test类, 然后执行test类里第一个new A(),此时加载类A,类A里的所有static属性缺省初始化、然后第一个static属性显示初始化(第2个static属性仍缺省初始化,b是0),执行public final static A a=new A(); 里的new A();因为new A(),所以调构造A(){},b打印出b的缺省值0,然后b++,变成1,构造执行完毕,回来执行到类A的第2个static属性b显示初始化,这时,就把刚才b++变成1的值擦掉了,b重新变成0,所以打印的值是0,完毕。
现在回到test类,执行第2个new A(),因为刚才已经加载了类A,就不再加载了,直接执行构造A(){},打印的值是1,
[解决办法]
先初始化类的静态域
public final static A a=new A(); 

我初始化了 


A() X3 

System.out.println("我初始化了"); 
System.out.println(b); 
b++; 



我初始化了 

我初始化了 

我初始化了 




[解决办法]
很简单..为什么会有两个 .

Java code
我初始化了0 

热点排行
Bad Request.