先看两段代码和它们的输出吧:public class TestStaticCon { public static int a = 0; {
a = 10;
System.out.println("父类的非静态代码块在执行a=" + a);
} public TestStaticCon() {
this("a在父类带参构造方法中的值:" + a); // 调用另外一个构造方法
System.out.println(a);
System.out.println("父类无参构造方法在执行a=" + a);
} public TestStaticCon(String n) {
System.out.println(n);
} public static void main(String[] args) {
TestStaticCon tsc = new TestStaticCon();
}
}
父类的非静态代码块在执行a=10
a在父类带参构造方法中的值:0 --->已经执行了非静态块了,为什么还是0呢?
10
父类无参构造方法在执行a=10public class TestStaticCon1 {
public static int a = 0; static {
a = 10; //能改变a的值
System.out.println("父类的静态代码块在执行a=" + a);
} {
a = 20; //不能改变a的值
System.out.println("父类的非静态代码块在执行a=" + a);
} public TestStaticCon1() {
this("a在父类带参构造方法中的值:" + a); // 调用另外一个构造方法
System.out.println(a);
System.out.println("父类无参构造方法在执行a=" + a);
} public TestStaticCon1(String n) {
System.out.println(n);
} public static void main(String[] args) {
TestStaticCon1 tsc = new TestStaticCon1();
}
}
父类的静态代码块在执行a=10
父类的非静态代码块在执行a=20
a在父类带参构造方法中的值:10 --->同样的问题,非静态块执行了 怎么还是10,而不是20呢?
20
父类无参构造方法在执行a=20
a = 10;
System.out.println("父类的非静态代码块在执行a=" + a);
} public TestStaticCon() {
this("a在父类带参构造方法中的值:" + a); // 调用另外一个构造方法
System.out.println(a);
System.out.println("父类无参构造方法在执行a=" + a);
} public TestStaticCon(String n) {
System.out.println(n);
} public static void main(String[] args) {
TestStaticCon tsc = new TestStaticCon();
}
}
父类的非静态代码块在执行a=10
a在父类带参构造方法中的值:0 --->已经执行了非静态块了,为什么还是0呢?
10
父类无参构造方法在执行a=10public class TestStaticCon1 {
public static int a = 0; static {
a = 10; //能改变a的值
System.out.println("父类的静态代码块在执行a=" + a);
} {
a = 20; //不能改变a的值
System.out.println("父类的非静态代码块在执行a=" + a);
} public TestStaticCon1() {
this("a在父类带参构造方法中的值:" + a); // 调用另外一个构造方法
System.out.println(a);
System.out.println("父类无参构造方法在执行a=" + a);
} public TestStaticCon1(String n) {
System.out.println(n);
} public static void main(String[] args) {
TestStaticCon1 tsc = new TestStaticCon1();
}
}
父类的静态代码块在执行a=10
父类的非静态代码块在执行a=20
a在父类带参构造方法中的值:10 --->同样的问题,非静态块执行了 怎么还是10,而不是20呢?
20
父类无参构造方法在执行a=20
解决方案 »
- JDIC开发了一款桌面浏览器,然后用exe4j连同jre环境
- socket和objectoutputstream的问题,debugger的话出问题,正常情况下没问题?
- 字符串转为int传入时,越界的判断如何进行啊?
- 请教一个 关于数据源链接的 问题!?
- 要我学JAVA要下载哪些软件?
- 再次发布-----上海某外企诚聘日语软件研发工程师(月薪7000RMB+)
- 什么叫做持有对方引用?
- 请问这个方法是InputStream.read(byte[] b, int off, int len)什么
- 一般开发应用软件用哪个编译器?
- java中多线程的问题
- java编写界面的问题
- eclipse 打包成 .jar 后图片无法加载
楼主【justinavril】截止到2008-08-02 14:02:58的历史汇总数据(不包括此帖):
发帖的总数量:12 发帖的总分数:580 每贴平均分数:48
回帖的总数量:140 得分贴总数量:36 回帖的得分率:25%
结贴的总数量:11 结贴的总分数:530
无满意结贴数:0 无满意结贴分:0
未结的帖子数:1 未结的总分数:50
结贴的百分比:91.67 % 结分的百分比:91.38 %
无满意结贴率:0.00 % 无满意结分率:0.00 %
值得尊敬
取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=justinavril
this("a在父类带参构造方法中的值:" + a); // 调用另外一个构造方法
这里this是在构造方法中最早调用的,所以这个时候a是0,所以是把0做为参数传入另一个构造方法的。
然后开始执行这个构造方法 public TestStaticCon1(String n) {
System.out.println(n);
}
执行之前首先执行初始化
static {
a = 10; //能改变a的值
System.out.println("父类的静态代码块在执行a=" + a);
}
所以这时候a已经是10了。然后执行另一个构造方法,注意构造方法的参数是:a在父类带参构造方法中的值:0
这里也是以a为参数,当然结果是你显示的那样了this("a在父类带参构造方法中的值:" + a);
这么理解对吗?另外 this是指代当前的对象 那this肯定是最先产生的 对吧?也就是说现有对象 才有它自己的变量,构造方法...对吧?