为什么Java不允许在构造函数中递归?

时间:2012-03-23 11:02:53

标签: java recursion constructor

我认为允许递归有时非常方便,不是因为我可以在“递归”中编码,而是因为我可以为某些情况保存一些代码空间,如下所示

public class SomeClass
{
   private int a;

   SomeClass(int a)
   {
      this.a = a;
   }

   SomeClass()
   {
      SomeClass(3);
   }
}

当一个构造函数试图利用包含大块代码的另一个构造函数时,这尤其有效。

但是,Java显然不支持此功能,我认为这并不是一个很好的理由。有人可以解释为什么吗?

4 个答案:

答案 0 :(得分:13)

Java支持这一点,但您需要使用不同的语法:

this(3);

答案 1 :(得分:5)

您可以使用this关键字在构造函数中调用另一个构造函数:

public class SomeClass
{
   private int a;

   SomeClass(int a)
   {
      this.a = a;
   }

   SomeClass()
   {
      this(3);
   }
}

从Java语言规范,8.8.7.1 Explicit Constructor Invocations部分:

  

备用构造函数调用以关键字this开头   (可能以显式类型参数开头)。他们习惯了   调用同一个类的替代构造函数。

我不知道这与recursion有什么关系。

答案 2 :(得分:1)

您要找的是this(3),而不是SomeClass(3)

答案 3 :(得分:0)

它不被称为递归。 Java具有您可以在类中重载构造函数的功能....