public class Test {
private static Test test=new Test();//步骤1
private static int c1;//步骤2
private static int c2=0;//步骤3
private Test(){//步骤4
c1++;
c2++;
}
Test get(){//步骤5
return test;
}
public static void main(String[] args) {
Test t=new Test().get();
System.out.println(c1);
System.out.println(c2);
//
}
}
请说出他的调用的步骤和运行的结果
请说明理由,谢谢
因为这段代码很简单,我就从这里给你分析。 Test t=new Test().get();new Test()调用构造方法, private Test(){//步骤4
c1++;
c2++;
}这时, private static int c1;//步骤2 private static int c2=0;//步骤3C1没有初始值,因为定义的是静态的,第一次的C1初始值就是0,第二个次初始值就是上次调用后的结果。因为这是第一次new了一个Test对象,所以C1++为1,C2+也为1。然后。调用get()方法。get方法里面有个return test,test是由private static Test test=new Test();出来的,因此,当然会再度使用构造方法中的两个C1++和C2++,而C1没有初始值,当让他的值就是上次得到的1。C2有初始值0,所以结果C1=2,C2=1。这道题没什么难的,主要考察的是静态单立的熟练程度。如果不懂,可以追问
这段程序在我的角度看有问题啊。。。在主函数main中调用的c1,c2是类Test的成员变量啊,就算是static的也不能直接访问啊。。。
执行顺序:
1、步骤 1
2、步骤 4
(此时c1、c2尚未初始化,默认为0。 ++之后:c1=1,c2=1)
3、步骤 2
(此时c1没有进行初始化,仍然为 1,c1=1)
4、步骤 3
(此时c2进行了初始化,由1改变为0,c2=0)
5、执行main方法:
(1)、执行步骤 4
(此时c1=2、c2=1)
(2)、执行步骤 5
所以、最后打印的结果:
c1=2;
c2=1;