黑马程序员技术交流社区

标题: 谁能帮我解释一下这个题目,谢谢啦 [打印本页]

作者: 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