黑马程序员技术交流社区

标题: this关键字的位置问题 [打印本页]

作者: 徐西宏    时间: 2011-8-29 13:28
标题: this关键字的位置问题
class Test {
         int q;
        final int  w =0;
        Test(){
               
                q =1;
                this(0);  //为什么this放这会报错而放在q=1上面就不报错了     
        }
        Test(int x){
                q=x;
        }
}
作者: 匿名    时间: 2011-8-29 13:42
不知道,我觉得这样放也可以,只不过像你这样写的话本来你想设置q=1的,结果一调用就变0了,所以sun才这样设置一些规则,为了更方便而避免发生上面这样的情况
作者: 匿名    时间: 2011-8-29 13:44
标题: 回复 楼主 的帖子
构造方法必须放在第一句, 这里this(0),其实就是调用了Test(int x)这个构造方法。
如果按照你的错误的代码运行会出现什么结果:
首先构造函数new一个对象其中的q= 0 ,然后这个构造函数又调用了下面的构造函数又搞一个对象。如果这样运行就会一个构造函数创建两个对象。肯定是创建不出来的。
如果把this(0),放到第一句。那么流程就会是第一个构造函数直接调用Test(int x)的函数,第二句q =1 只是把这个构造函数创建的对象的q,做下修改。运行下来就只有一个对象了。
作者: 匿名    时间: 2011-8-29 13:49
在构造方法中利用this调用其它构造方法时 this关键字必须放在本构造方法的第一行 而且必须保证所有的构造方法中 至少有一个构造方法里 没有使用this调用其它构造方法 以避免相互调用陷入死循环
作者: 匿名    时间: 2011-8-29 14:28
[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()调用都只能放在构造方法的第一行,且只能用一种




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2