📜  Java构造函数面试题

📅  最后修改于: 2022-05-13 01:54:23.079000             🧑  作者: Mango

Java构造函数面试题

  1. 什么是构造函数?
    构造函数用于初始化对象的状态。与方法一样,构造函数也包含在创建对象时执行的语句(即指令)集合。
  2. 我们在Java中有复制构造函数吗?
    与 C++ 一样, Java也支持复制构造函数。但是,与 C++ 不同的是,如果您不自己编写, Java不会创建默认的复制构造函数
    要将一个对象的值复制到Java中的另一个对象中,您可以使用:
    • 构造函数
    • 将一个对象的值分配给另一个对象
    • Object 类的 clone() 方法
  3. 什么是构造函数链?
    构造函数链接是一种从一个构造函数调用另一个构造函数的技术。 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();
        }
    }
    
  4. 我们可以从超类构造函数中调用子类构造函数吗?
    不,在Java中没有办法从超类构造函数调用子类构造函数。
  5. 如果为构造函数保留返回类型会发生什么?
    理想情况下,构造函数不能有返回类型。根据定义,如果方法有返回类型,则它不是构造函数。(JLS8.8 声明)它将被视为普通方法。但是编译器会给出一个警告,说该方法有一个构造函数名称。例如:
    class GfG
    {
        int GfG()
        {
            return 0;    // Warning for the return type
        }
    }
  6. 什么是无参数构造函数?
    没有参数的构造函数称为无参数构造函数。 Java中的默认构造函数始终是无参数构造函数。
    class GfG
    {
        public GfG()
        {
            //No-arg constructor
        }
    }
  7. 无参数构造函数与默认构造函数有何不同?
    如果一个类不包含构造函数声明,则隐式声明一个没有形式参数且没有 throws 子句的默认构造函数。

    如果声明的类是原始类 Object,则默认构造函数的主体为空。否则,默认构造函数只是调用不带参数的超类构造函数。

  8. 什么是私有构造函数,它们在哪里使用?
    像任何方法一样,我们可以为构造函数提供访问说明符。如果它是私有的,那么它只能在类内部访问。
    我们使用私有构造函数的主要场景:
    • 内部构造函数链接
    • 单例类设计模式
  9. 我们什么时候需要构造函数重载?
    有时需要以不同的方式初始化对象。这可以使用构造函数重载来完成。不同的构造函数可以通过实现不同的代码行来完成不同的工作,并根据传递的参数类型和数量来调用它们。
    根据情况,在重载的构造函数中调用具有特定数量参数的构造函数。
  10. 我们在Java中有析构函数吗?
    不,因为Java是一种垃圾收集语言,所以您无法预测对象何时(或什至)会被销毁。因此,没有直接等效的析构函数。

构造函数测验