2014-03-05 114 views
0

你好,我参加了计算机科学1,并在Java中理解构造函数。什么使合法的构造函数,什么会使构造函数非法?

我的书中有一个问题要求:

下面的代码有什么问题?

public C7e2() 
{ 
    C7e2 r; 
    r= new C7e2; 
} 

我知道你可以写实例变量为C7e2 r = new C7e2(); 一旦我创建了一个主要方法,这将是一个合法的程序吗?尽管它没有做任何特别的事情。

任何初学者信息都将被大大收到。

+2

你的构造无限递归调用本身,基本上,你会得到构造调用构造函数的递归无限循环调用构造函数...... –

+0

@ s.bandara :你觉得什么都没用? OP询问如果编译和运行代码会发生什么。他只需要这样做就可以得到答案。不需要问我们。实验是收益过程的关键部分,是每个科学过程的基础。 –

+0

@JBNizet我同意所有这些,除非你断言它不会编译。它的确如此。我无法想象为什么你会认为不然。 – EJP

回答

0

这将创建一个无限递归,直到堆栈溢出。认为C7e2()构造函数实例化另一个C7e2对象,这将再次调用构造函数,这将实例化另一个C7e2,它将调用...

对象的构造处理该对象的新实例的创建。如果创建该对象需要创建另一个实例,则该第二个实例将需要第三个实例等。

0

在该类的构造函数中,您试图创建此类的一个对象。问题是这是一个递归,当你创建一个C7e2对象时,你的程序将无法工作。不要在类的构造函数中创建对象。

0

您给出的示例是完全合法的,因为它在语法上是正确的Java代码,并且会在您修复缺少的括号时进行编译。但它不会执行,因为它涉及到对C7e2().

相关问题