黑马程序员技术交流社区
标题:
谁能帮我解释一下这个题目,谢谢啦
[打印本页]
作者:
sabrina妖儿
时间:
2015-11-15 21:09
标题:
谁能帮我解释一下这个题目,谢谢啦
public class StaticTest {
static int x=1; int y;
StaticTest(){ y++; }
public static void main(String args[ ]){
StaticTest st=new StaticTest();
System.out.println("x=" + x);
System.out.println("st.y=" + st.y);
st=new StaticTest();
System.out.println("st.y=" + st.y);
}
static { x++;}
}
作者:
hbcoding
时间:
2015-11-15 21:47
静态代码块中的x++在类加载的时候执行,并且只执行一次,所以打印x=2。而成员变量y在建立对象时的默认初始化值为0,建立对象时执行构造函数中的y++,所以第一个y打印的值为1.语句st=new StaticTest();相当于将变量st指向一个新的对象,所以打印的y仍为1
作者:
yaoyeqing
时间:
2015-11-15 22:26
路过,看不懂
作者:
小笨笨天
时间:
2015-11-15 22:59
一楼正解 你 y 没有复制 所以默认为0
作者:
一步一微笑
时间:
2015-11-15 23:05
一楼正解 你 y 没有复制 所以默认为0
作者:
梭梭树
时间:
2015-11-15 23:21
看程序执行流程,主方法中StaticTest st=new StaticTest();创建对象必须加载其所在的类,static { x++;}
}随着类加载而加载,所以是x=2,创建对象前,对象属性y默认初始化值0,对象st调用属性y,执行构造函数StaticTest(){ y++; },y=1,st=new StaticTest();有创建一个对象,对象属性y默认初始化值0,对象st调用属性y,执行构造函数StaticTest(){ y++; },y=1
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2