A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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++;}
}

6 个回复

倒序浏览
静态代码块中的x++在类加载的时候执行,并且只执行一次,所以打印x=2。而成员变量y在建立对象时的默认初始化值为0,建立对象时执行构造函数中的y++,所以第一个y打印的值为1.语句st=new StaticTest();相当于将变量st指向一个新的对象,所以打印的y仍为1

点评

谢谢!懂了  发表于 2015-11-16 15:28
回复 使用道具 举报
路过,看不懂
回复 使用道具 举报
一楼正解   你 y 没有复制  所以默认为0  
回复 使用道具 举报
一楼正解   你 y 没有复制  所以默认为0  
回复 使用道具 举报
看程序执行流程,主方法中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
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马