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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐西宏 黑马帝   /  2011-8-29 13:28  /  2387 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Test {
         int q;
        final int  w =0;
        Test(){
               
                q =1;
                this(0);  //为什么this放这会报错而放在q=1上面就不报错了     
        }
        Test(int x){
                q=x;
        }
}

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

4 个回复

倒序浏览
黑马网友  发表于 2011-8-29 13:42:48
沙发
不知道,我觉得这样放也可以,只不过像你这样写的话本来你想设置q=1的,结果一调用就变0了,所以sun才这样设置一些规则,为了更方便而避免发生上面这样的情况
回复 使用道具 举报
黑马网友  发表于 2011-8-29 13:44:16
藤椅

回复 楼主 的帖子

构造方法必须放在第一句, 这里this(0),其实就是调用了Test(int x)这个构造方法。
如果按照你的错误的代码运行会出现什么结果:
首先构造函数new一个对象其中的q= 0 ,然后这个构造函数又调用了下面的构造函数又搞一个对象。如果这样运行就会一个构造函数创建两个对象。肯定是创建不出来的。
如果把this(0),放到第一句。那么流程就会是第一个构造函数直接调用Test(int x)的函数,第二句q =1 只是把这个构造函数创建的对象的q,做下修改。运行下来就只有一个对象了。

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2 回答的很好!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-8-29 13:49:24
板凳
在构造方法中利用this调用其它构造方法时 this关键字必须放在本构造方法的第一行 而且必须保证所有的构造方法中 至少有一个构造方法里 没有使用this调用其它构造方法 以避免相互调用陷入死循环
回复 使用道具 举报
黑马网友  发表于 2011-8-29 14:28:35
报纸
[url]http://topic.csdn.net/t/20040510/09/3048268.html[/url]
[url]http://hi.baidu.com/yunhuayu_/blog/item/1eb2c854339cf9063a2935ad.html[/url]
参考
我的理解:
大概意思就是说你的[color=Red](this.)[/color]q=1
红色部分this.表示Test类的对象,调用一个对象之前首先要调用他的构造函数
如果放在后面,就是说还没有一个构造函数初始化对象
super()和this()调用都只能放在构造方法的第一行,且只能用一种
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马