日期:2014-05-20  浏览次数:20801 次

同学无意间写的代码 谁能不通过执行 自己写出正确的结果 大家来看看自己的基础怎么样
public class test 
{
int x;
int i=this.a();

test()
{
this.x=12;
this.i=this.a();
}

int a()
{
System.out.println(x+" "+i);
return x;
}

public static void main(String [] arge){

test a1=new test();
a1.a();
}

}
大家先自己写 再执行看看对不对 大家要觉得简单 就鄙视下我吧 第一次看 蒙了一分钟 后来看执行结果才弄明白

------解决方案--------------------
还少一行
0 0
12 0
12 12
------解决方案--------------------
我猜是
0 0 
12 0 
12 12
这样猜的前提是,声明时的new或者方法调用最早,然后是构造函数中,再是外面去调用。0是因为,默认初始值

------解决方案--------------------
0 0
12 0
12 12
------------------

创建对象的时候会先初始化static变量(当然static变量只会在类第一次加载的时候初始化),然后是成员变量,primitive的初始化为0,对象则初始化为null,
然后再对变量赋值(当然如果你是这样声明变量的话,就不会赋值了:int a; String str;)
接着就是构造函数里面的内容了.而构造函数里面第一条语句就是执行父类的无参构造函数(当然,如果你显式调用了父类的构造函数,编译器就不会调用无参的构造函数了)
------解决方案--------------------
类名居然是小写...........................楼主注意哦