黑马程序员技术交流社区

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

作者: Moonboy2014    时间: 2014-6-12 14:53
标题: this关键字的问题
class Student
{
        private String name;
        private iont age;
        Student()
        {
                this("haha");
        }
        Student(String name)
        {
                this();
                this.name = name;
        }
}
........new Person();......
问一下,这段代码能够编译通过吗?尽量帮忙解答详细些,多谢了!
作者: Gaara33    时间: 2014-6-12 14:56
首先private  iont  age;是不能通过的
作者: Moonboy2014    时间: 2014-6-12 16:06
Gaara33 发表于 2014-6-12 14:56
首先private  iont  age;是不能通过的

呵呵,这个是笔误:loveliness:
作者: 闪耀.Q    时间: 2014-6-12 17:16
下面这个new Person()是啥?你是想写new Student()吧? 能不能通过你运行下不就知道了?
作者: 闪耀.Q    时间: 2014-6-12 17:20
class Student
{
        private String name;
        private int age;
        Student ()
        {
                this("haha");
        }
        Student (String name)
        {
                this.name = name;
        }
        public String getName()
         {
              return name;
         }
        public static void main(String[] args)
        {
        Student  s = new Student ();
        System.out.println(s.getName());
        }
}
是不是这个意思?第二个构造器里的this(); 是不是多余?带着它貌似就转圈出不来了。去了它就通顺了。
作者: Stay    时间: 2014-6-12 17:47
闪耀.Q 发表于 2014-6-12 17:20
class Student
{
        private String name;

貌似构造函数确定了接收对象就不能用this();了。
作者: 唐坚    时间: 2014-6-12 17:56
验证了一下 编译不能通过,显示:: 错误: 递归构造器调用
也就是进入递归调用死循环 。程序出不来了。
去掉 this()或this("haha")中的一个就行了。
作者: Moonboy2014    时间: 2014-6-12 22:51
唐坚 发表于 2014-6-12 17:56
验证了一下 编译不能通过,显示:: 错误: 递归构造器调用
也就是进入递归调用死循环 。程序出不来了。
去掉 ...

恩,我就是想知道两者之间相互调用的过程,谢谢!
作者: 焦国军    时间: 2014-6-12 23:02
不能通过,不说private  iont age;这个失误,只说构造函数Student(){}
作者: 焦国军    时间: 2014-6-12 23:11
不能通过,不说private  iont age;这个失误,只说构造函数Student(){this("haha")},当实例化对象时,如:Student  stu=new Student(),在执行this("haha")这句话时,会进入一个死循环,this("haha")相当于Student("haha"),然后再执行 Student(String name) {   this();  this.name = name;  },再当执行到this()时又开始执行Student(){this("haha"); },以此往返形成死循环
作者: 安彦宇    时间: 2014-6-13 00:13
构造函数是不能递归调用的,要不然就是死循环了,构造函数那两哥们就自个隔那玩起来了!
作者: Moonboy2014    时间: 2014-6-13 11:18
焦国军 发表于 2014-6-12 23:11
不能通过,不说private  iont age;这个失误,只说构造函数Student(){this("haha")},当实例化对象时,如 ...

感谢解答:loveliness:
作者: 喜爱    时间: 2014-6-13 11:49
不能吧,在你创建对象的时,好像构造函数出现死循环吧,最终导致内存溢出异常。
作者: Piston    时间: 2014-6-13 11:59
^_^ ,,  学到了。懂得了。
作者: lilin202011    时间: 2014-6-22 00:24
不错顶一个
作者: Leung    时间: 2014-6-24 11:18
死循环{:2_30:}




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