您好我参加了计算机科学1,并且正在学习java中的构造函数。
我的书中有一个问题:
以下代码有什么问题?
public C7e2()
{
C7e2 r;
r= new C7e2;
}
我知道你可以把实例变量写成C7e2 r = new C7e2(); 一旦我创建了一个主要方法,这将是一个合法的程序吗?即使它没有做任何特别的事情。
任何初学者信息都会受到极大的欢迎。
答案 0 :(得分:0)
这将创建无限递归,直到堆栈溢出。考虑C7e2()
构造函数正在实例化另一个C7e2
对象,它将再次调用构造函数,这将实例化另一个C7e2
,它将调用...
对象的构造函数处理该对象的新实例的创建。如果创建对象需要创建自己的另一个实例,那么第二个实例将需要第三个实例
答案 1 :(得分:0)
在类的构造函数中,您尝试创建此类的对象。问题是这是一个递归,当你创建一个C7e2对象时,你的程序将无法正常工作。不要在类的构造函数中创建对象。
答案 2 :(得分:0)
你给出的例子是完全合法的,因为它是语法上正确的Java代码,并且一旦你修复了丢失的括号就会编译。但它不会执行,,因为它涉及C7e2().
上的无限递归