📜  有关Java构造函数的面试问题

📅  最后修改于: 2020-04-02 14:20:15             🧑  作者: Mango

  • 什么是构造函数?
    构造函数用于初始化对象的状态。与方法类似,构造函数还包含在创建对象时执行的语句(即指令)的集合。
  • 我们有Java中的Copy Constructor吗?
    像C++一样,Java也支持复制构造函数。但是,与C++不同,如果您不编写,则Java不会创建默认的副本构造函数
    要将一个对象的值复制到Java中的另一个对象,可以使用:
    • 构造函数
    • 将一个对象的值分配给另一个对象
    • Object类的clone()方法
  • 什么是构造函数链接
    构造函数链接是一种从一个构造函数调用另一个构造函数的技术。this()用于调用相同的类构造函数,而super()用于调用超类构造函数。
    // Java展示构造函数链接,使用this()用于调用相同的类构造函数
    class Temp
    {
        // 默认构造函数1
        // 会调用另一个构造函数,利用this关键字
        Temp()
        {
            // 调用构造函数2
            this(5);
            System.out.println("默认构造函数");
        }
        // 参数构造函数 2
        Temp(int x)
        {
            // 调用构造函数 3
            this(5, 15);
            System.out.println(x);
        }
        // 参数构造函数 3
        Temp(int x, int y)
        {
            System.out.println(x * y);
        }
        public static void main(String args[])
        {
            // 先调用默认构造函数
            new Temp();
        }
    }
  • 我们可以从超类构造函数中调用子类构造函数吗?
    否。在Java中,无法从超类构造函数调用子类构造函数。
  • 如果保留构造函数的返回类型会怎样?
    理想情况下,构造函数不得具有返回类型。根据定义,如果方法具有返回类型,则它不是构造函数。(JLS8.8声明)它将被视为普通方法。但是编译器警告说该方法具有构造函数名称。
    class GfG
    {
        int GfG()
        {
            return 0;    // 会被警告。。
        }
    }
    
  • 什么是没有参数构造函数?
    没有参数的构造函数称为无参数构造函数。Java中的默认构造函数始终是无参数的构造函数。
    class GfG
    {
        public GfG()
        {
            //没有参数构造函数
        }
    }
    
  • 无参数构造函数与默认构造函数有何不同
    如果一个类不包含构造函数声明,则隐式声明一个没有正式参数且没有throws子句的默认构造函数。如果要声明的类是原始类Object,则默认构造函数的主体为空。否则,默认构造函数将简单地调用不带参数的超类构造函数。 
  • 什么是私有构造函数?在哪里使用它们?
    像任何方法一样,我们可以为构造函数提供访问说明符。如果将其设为私有,则只能在类内部访问它。
    我们使用私有构造函数的主要场景:
    • 内部构造函数链接
    • 单例类设计模式 
  • 什么时候需要构造函数重载
    有时需要以不同的方式初始化对象,可以使用构造函数重载来完成。不同的构造函数可以通过实现不同的代码来完成不同的工作,并且根据类型和未传递的参数来调用它们。
    根据情况,在重载的构造函数中使用特定数量的参数调用构造函数。 
  • 我们在Java中有析构函数吗?
    没有,因为Java是一种自带垃圾收集语言,所以您无法预测何时(或什至)一个对象将被销毁。因此,没有析构函数的直接等效项。