Java中的递归构造函数调用

2023年 8月 28日 77.4k 0

Java中的递归构造函数调用

递归构造函数调用是一个在编译时发生的错误,当一个构造函数调用自身时会出现这个错误。它类似于递归,其中一个方法根据需要多次调用自身。调用自身的方法被称为递归方法,调用自身的构造函数被称为递归构造函数。

在本文中,我们将通过几个示例来了解Java中的递归构造函数调用错误。

递归构造函数调用

构造函数

它与方法非常相似,但区别在于方法定义了对象的行为,而构造函数用于初始化这些对象。我们可以为方法提供任何我们选择的名称,但构造函数必须与类名相同。此外,方法可以返回一个值,但构造函数不返回任何值,因为它们不能有任何返回类型。

当用户没有创建任何构造函数时,Java编译器会自动创建一个构造函数(我们称之为默认构造函数)。

示例 1

public class Cnst { // class name
Cnst() {
// constructor
System.out.println("I am constructor");
}
public static void main(String[] args) {
Cnst obj = new Cnst();
// calling the Constructor
}
}

登录后复制

输出

I am constructor

登录后复制

尽管构造函数和方法之间有相似之处,但 Java 不允许递归构造函数。这是一种不好的编程习惯。

示例 2

以下示例说明了递归构造函数调用错误。

在这里,我们将创建一个类并定义其构造函数和两个参数。然后,我们将在其体内调用相同的构造函数。

public class Cart {
String item;
double price;
Cart(String item, int price) { // constructor
this(item, price); // constructor is calling itself
// this keyword shows these variables belong to constructor
this.item = item;
this.price = price;
}
public static void main(String[] args) {
Cart obj = new Cart("Bread", 15); // creating object
System.out.println("Constructor calling another Constructor");
}
}

登录后复制

输出

Cart.java:4: error: recursive constructor invocation
Cart(String item, int price) { // constructor
^
1 error

登录后复制

Example 3

的中文翻译为:

示例3

在下面的示例中,我们将尝试在构造函数内部定义一个对象,以检查Java是否允许在构造函数内创建对象。

public class Cart {
String item;
double price;
Cart(String item, int price) {
// constructor
// this keyword shows these variables belong to constructor
this.item = item;
this.price = price;
Cart obj2 = new Cart("Milk", 55);
// creating object
}
public static void main(String[] args) {
Cart obj1 = new Cart("Bread", 15);
// creating another object
System.out.println("Constructor calling another Constructor");
}
}

登录后复制

输出

Exception in thread "main" java.lang.StackOverflowError
at Cart.(Cart.java:9)
at Cart.(Cart.java:9)
at Cart.(Cart.java:9)
at Cart.(Cart.java:9)
at Cart.(Cart.java:9)
at Cart.(Cart.java:9)
at Cart.(Cart.java:9)

登录后复制

我们遇到StackOverflowError错误,因为在构造函数内部创建对象会导致无限循环的对象创建。

Example 4

的中文翻译为:

示例4

以下示例演示了在另一个构造函数中调用构造函数是合法的。

public class Cart {
// class
String item;
double price;
Cart(String item, int price) {
// first constructor
// this keyword shows these variables belong to constructor
this.item = item;
this.price = price;
}
public Cart (int price) {
// second constructor
this(null, price);
// calling the 1st constructor
}
public static void main(String[] args) {
Cart obj = new Cart(15);
// creating object
System.out.println("Constructor calling another Constructor");
}
}

登录后复制

输出

Constructor calling another Constructor

登录后复制

结论

Java不允许构造函数的递归,因此明显应该避免这种编程实践。在本文中,我们从讨论构造函数开始,试图解释递归构造函数。此外,我们还发现了另一个名为StackOverflowError的错误,该错误是由于无限循环而引起的。

以上就是Java中的递归构造函数调用的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论