Java构造函数面试题
- 什么是构造函数?
构造函数用于初始化对象的状态。与方法一样,构造函数也包含在创建对象时执行的语句(即指令)集合。 - 我们在Java中有复制构造函数吗?
与 C++ 一样, Java也支持复制构造函数。但是,与 C++ 不同的是,如果您不自己编写, Java不会创建默认的复制构造函数。
要将一个对象的值复制到Java中的另一个对象中,您可以使用:- 构造函数
- 将一个对象的值分配给另一个对象
- Object 类的 clone() 方法
- 什么是构造函数链?
构造函数链接是一种从一个构造函数调用另一个构造函数的技术。 this() 用于调用相同的类构造函数,而 super() 用于调用超类构造函数。// Java program to illustrate Constructor Chaining // within same class Using this() keyword class Temp { // default constructor 1 // default constructor will call another constructor // using this keyword from same class Temp() { // calls constructor 2 this(5); System.out.println("The Default constructor"); } // parameterized constructor 2 Temp(int x) { // calls constructor 3 this(5, 15); System.out.println(x); } // parameterized constructor 3 Temp(int x, int y) { System.out.println(x * y); } public static void main(String args[]) { // invokes default constructor first new Temp(); } }
- 我们可以从超类构造函数中调用子类构造函数吗?
不,在Java中没有办法从超类构造函数调用子类构造函数。 - 如果为构造函数保留返回类型会发生什么?
理想情况下,构造函数不能有返回类型。根据定义,如果方法有返回类型,则它不是构造函数。(JLS8.8 声明)它将被视为普通方法。但是编译器会给出一个警告,说该方法有一个构造函数名称。例如:class GfG { int GfG() { return 0; // Warning for the return type } }
- 什么是无参数构造函数?
没有参数的构造函数称为无参数构造函数。 Java中的默认构造函数始终是无参数构造函数。class GfG { public GfG() { //No-arg constructor } }
- 无参数构造函数与默认构造函数有何不同?
如果一个类不包含构造函数声明,则隐式声明一个没有形式参数且没有 throws 子句的默认构造函数。如果声明的类是原始类 Object,则默认构造函数的主体为空。否则,默认构造函数只是调用不带参数的超类构造函数。
- 什么是私有构造函数,它们在哪里使用?
像任何方法一样,我们可以为构造函数提供访问说明符。如果它是私有的,那么它只能在类内部访问。
我们使用私有构造函数的主要场景:- 内部构造函数链接
- 单例类设计模式
- 我们什么时候需要构造函数重载?
有时需要以不同的方式初始化对象。这可以使用构造函数重载来完成。不同的构造函数可以通过实现不同的代码行来完成不同的工作,并根据传递的参数类型和数量来调用它们。
根据情况,在重载的构造函数中调用具有特定数量参数的构造函数。 - 我们在Java中有析构函数吗?
不,因为Java是一种垃圾收集语言,所以您无法预测对象何时(或什至)会被销毁。因此,没有直接等效的析构函数。
构造函数测验