Java 中的构造函数链接及其示例和实现

已发表: 2023-06-05

在 Java 中,构造函数可以理解为用于初始化新创建的对象的代码块。 构造函数类似于 Java 中的实例方法。 然而,Java 中的构造函数和方法之间存在一个关键区别——方法具有返回类型,而构造函数没有任何特定的返回类型。 程序员经常将构造函数称为 Java 中的一种特殊类型的方法。

Java 中的构造函数与类同名,它们如下所示:

公开课 myProgram{

//这是构造函数

我的程序(){

}

..

}

当从另一个构造函数中调用构造函数时,即在 Java 中发生构造函数链接时。 然而,在我们深入研究构造函数链接之前,让我们首先快速了解一下构造函数在 Java 中的工作方式,以及一些示例来巩固您的理解。

目录

Java 中的构造函数如何工作?

要了解构造函数的工作原理,让我们看一个示例。 假设我们有一个名为 myProgram 的类。 现在,当我们创建这个类的对象时,我们将不得不编写以下语句:

myProgram obj = new myProgram()

如您所见,上面示例中使用的 new 关键字创建了 myProgram 的对象,并调用构造函数来初始化这个新创建的对象。

如果这听起来让您有些困惑,请不要担心。 让我们看一个简单的 Java 构造函数程序,以更好地理解 Java 中构造函数的工作原理。

Java 中的基本构造函数程序

查看以下使用构造函数的 Java 代码:

公共课测试{

弦书;

//构造函数

测试(){

this.book = “麦田里的守望者”;

}

public static void main(String[] args) {

测试对象 = 新测试();

System.out.println(obj.book);

}

}

输出:

麦田里的守望者

在上面的程序中,我们创建了一个名为“obj”的对象。 然后,我们打印了这个新创建的对象的实例变量名。 从输出中可以看出,输出与构造函数初始化期间传递给“book”的值相同。

这表明在创建 obj 对象的那一刻,构造函数被自动调用。 在这里,我们使用“this”关键字来引用当前对象。 还有更多方法可以做到这一点,我们将在本文后面讨论构造函数链接时讨论。

了解了 Java 中构造函数的基础知识后,让我们继续学习 Java 中的构造函数链及其工作原理!

单个类中的构造函数链接

但是, Java 中涉及单个类的构造函数链是什么? 从同一类中的另一个构造函数调用一个构造函数包括该类中的构造函数链接。 “this”关键字用于同一类中构造函数链接的语法中。 使用“this”时引用当前类实例。 最好通过示例了解 Java 中构造函数链接的用法

从基类/父类链接构造函数

Java 中的一个类可以派生自另一个类; 派生类称为子类,派生类称为超类。 子类可以有自己的构造函数并调用其超类的构造函数。

超类构造函数使用术语 super(),后跟所需的输入。 super() 关键字必须始终出现在子类构造函数的第一行中。

来自不同构造函数的调用,一个生成器

使用 this() 关键字,Java 中的构造函数可以调用同一类中的另一个构造函数。 构造函数中的第一个关键字必须始终是 this() 关键字,它只能用于调用同一类型的另一个构造函数。

电话超类构造函数

Java 中的 super() 关键字允许子类构造函数调用超类的构造函数。 super() 关键字,只能用于调用子类超类的构造函数,必须始终位于子类构造函数的第一行。

如果构造函数以不同的顺序排列,Java 程序的行为可能会有所不同。 如果一个类有许多构造函数,并且其中一个使用 this() 关键字调用另一个构造函数,则更改构造函数的顺序可以改变程序的行为方式。

使用 Init 块链接构造函数的不同方法

使用初始化块是Java 中构造函数链接的另一种方法 一段称为初始化块的代码运行于

Java 中构造函数链的要点

当我们从同一类的另一个构造函数调用构造函数时,发生的事情称为构造函数链接。 进行构造函数链接的主要目的是通过一堆不同的构造函数传递参数,并且只在一个地方初始化它们。 这样,您就有机会在一个位置维护所有初始化,同时可以向用户提供不同的构造函数。

如果您不执行构造函数链接并且两个不同的构造函数需要一个参数,则您将需要对该参数进行两次初始化。 另外,每次初始化更改时,您都需要对所有构造函数进行相应的更改,而不仅仅是一个。

根据经验,您应该始终从参数较少的构造函数中调用参数较多的构造函数。 您还必须知道我们可以在类中重载多个构造函数。 但是,在创建对象时,只会调用一个特定的构造函数。 在使用 Java 编程时,可能会出现很多情况,您需要在不创建不同对象的情况下相互调用多个构造函数。 这种从另一个构造函数调用一个构造函数以及当涉及的构造函数调用另一个构造函数时的机制称为构造函数链接。

从世界一流大学在线学习软件课程获得执行 PG 课程、高级证书课程或硕士课程,以快速推进您的职业生涯。

关于构造函数链接,您应该牢记两件主要的事情,以确保最清晰:

  • 构造函数链接的主要目的是维护代码。 这个想法是帮助您只编写一段可以在您的程序中重复使用的代码。 这样,您的代码不仅会干净易读,而且由于所有更正和更改仅发生在一个位置而不是所有构造函数,因此管理起来也会容易得多。
  • 已调用的构造函数不会创建单独的对象。 相反,它使用当前运行的对象来调用另一个构造函数。 这就像在构造函数中调用不同的方法,只是它也是一个构造函数。

正如您在前面的示例中看到的,我们使用 this 关键字来访问构造函数的参数。 同样,构造函数链接也主要需要两个关键字。 这是这两个关键字:

  • this – 它的方法表示调用当前类构造函数。
  • super – 它的方法表示调用直接超类或父超类构造函数。

此外,您应该了解 Java 中构造函数链方面的一些其他重要术语和定义:

  • 构造函数调用:当您调用一个构造函数,并且该构造函数被成功调用时,它被称为构造函数调用。
  • 构造函数执行:如果调用构造函数,控制开始执行构造函数主体中的语句。 它被称为构造函数执行。

Java 中构造函数链的关键规则

了解了构造函数链的基础知识后,让我们看一下在 Java 中使用构造函数链的一些基本规则:

  • this()只能调用属于同一个Constructor的参数。
  • super() 只能调用直接超类的构造函数。
  • this() 和 super() 应该是构造函数中的第一条语句。
  • This () 和 super() 不能在同一个 Constructor 中使用,因为两个人都需要成为第一个语句,这实际上是不可能的。
  • 你不能在同一个类的所有构造函数中都添加 this() ,因为至少应该有一个构造函数没有 this() 语句。
  • Java中构造函数的调用和执行是相反的。 因此,如果以 A、B、C 的顺序调用构造函数,则执行将以 C、B、A 的顺序进行。

例如,在这里,我们有两个独立的类,它们通过重载不同的构造函数来工作。 我们希望以 2、1、4、3、5 的顺序执行构造函数。

要按顺序执行构造函数,我们需要以相反的顺序调用构造函数,如 5、3、4、1、2,请参见下面的示例。

父类

{

父母()// 1

{

这个(“你好”);

System.out.println("in Parent 0 arg constructor 1");

}

父级(字符串消息)// 2

{

System.out.println(“在 Parent(String) 构造函数 2”);

}

}

类构造函数扩展父类

{

构造函数()// 3

{

this(10);// 调用 5 号构造函数

System.out.println("in Constructor 0 arg constructor 3");

}

构造函数(字符串消息)// 4

{

super();//调用1号父类构造函数

System.out.println(“in Constructor(String msg) arg constructor 4”);

}

构造函数(int i)// 5

{

this("hello");//调用4个数字的构造函数

System.out.println("in Constructor(int i) constructor 5");

}

// 主要()方法

public static void main(String[] args)

{

构造函数cobj = new Constructor(); // 调用 3 数字构造函数

}

}

输出:

在 Parent(String) 构造函数中 2

在 Parent 0 arg 构造函数 1

in Constructor(String msg) arg 构造函数 4

在构造函数中(int i)构造函数 5

在构造函数 0 arg 构造函数 3

用最后一个例子总结 Java 中构造函数和构造函数链接的所有概念:

Emp类

{

公共字符串 EName;

公共国际收益;

公共字符串地址;

公共 Emp()

{

这(“拉胡尔”);

}

公共 Emp(字符串名称)

{

这个(名字,140035);

}

public Emp(字符串名称,int sal)

{

this(name, sal, “新德里”);

}

公共雇员(字符串名称,int sal,字符串添加)

{

this.EName=名字;

这个.EEarnings=sal;

this.address=add;

}

无效显示(){

System.out.println(“姓名:”+EName);

System.out.println(“工资:”+EEarnings);

System.out.println(“地址:”+地址);

}

public static void main(String[] args)

{

员工对象=新员工();

对象显示();

}

}

输出:

员工姓名:拉胡尔

员工工资:140035

员工地址:新德里

结论

这样,我们就到了本文的结尾。 我们希望这能澄清您对 Java 中的构造函数链的疑虑,并进一步巩固您的理解。 在 upGrad,我们相信帮助来自世界各地的学生充分发挥他们的潜力并在他们的职业生涯中取得成功。 我们的课程在设计时同时考虑到新手和经验丰富的专业人士。

其中一门课程是 upGrad 的软件工程与工作相关的 PG 认证,专为首次求职者设计。 查看课程内容并立即注册! 从行业专家和领先的专业人士那里学习所有相关的软件工程技能,如 Java、DSA、OODAP、JavaScript、MERN、AWS 等。

问:在 Java 中是否可以链接两个以上的构造函数?

Java 最多允许两个构造函数链。 通过这样做,您可以创建更复杂的对象并减少代码重复。

问:当 Java 中的构造函数调用自身时,会发生什么?

Java 中的构造函数调用自身将导致堆栈溢出错误和无限循环。

问:Java 中的默认构造函数是什么样子的?

Java 中的默认构造函数是不接受任何输入的构造函数。 如果类中没有声明构造函数,则会自动生成一个。