Java 中的构造函数类型

2025年7月7日 | 阅读 5 分钟

Java 中的 构造器 是一段代码块,类似于方法。在创建类实例时会调用它。调用构造器时,会为对象分配内存。它是一种用于初始化对象的特殊类型的方法。

阅读更多 Java 中的构造函数

Java 提供了以下四种类型的构造器

  1. 默认构造函数
  2. 无参构造器
  3. 参数化构造函数
  4. 复制构造函数

1. 默认构造器

在 Java 中,默认构造器是一个不接受任何参数的构造器。如果我们不在类中提供自己的构造器,JVM 会自动提供它。默认构造器的主要目的是用默认值初始化对象。默认情况下,构造器是不可见的。如果定义了一个不带参数的构造器,编译器就不会生成默认构造器。

在 Java 中,构造器可以是显式定义的,也可以是自动生成的。

  • 隐式默认构造器: 如果一个类缺少构造器,Java 编译器会自动添加一个默认构造器。通过一个不需要任何参数的构造器,对象会以默认值(例如,对象为 null,整数为 0)进行实例化。
  • 显式默认构造器: “显式默认构造器”指的是一个已定义但又不接受任何参数的构造器。此构造器会替换掉编译器通常会自动生成的那个。一旦我们指定了任何构造器,无论它是否带有参数,编译器将不再提供默认构造器。

示例:默认构造器

编译并运行

输出

 
It is the default constructor  

无参构造器

不带参数的构造器称为无参/参数构造器。例如,

示例:无参构造器

编译并运行

输出

 
Model: Default Model, Year: 2020   

默认构造器与无参构造器之间的主要区别

  • 如果我们定义了任何构造器(带参数或不带参数),Java 不会生成默认构造器。
  • 默认构造器永远是无参构造器,但无参构造器不一定是默认构造器,因为我们可能自己编写它。

参数化构造函数

参数化构造器 是一个构造器,它接受参数,以便在创建对象时使用特定值对其进行初始化。它提供了对如何初始化每个对象的控制,而不是依赖于默认值。

示例:参数化构造器

编译并运行

输出

 
Name: Andrew, ID: 101 

注意: 如果我们只定义了参数化构造器而没有默认构造器,并且尝试在不指定任何参数的情况下创建对象,这将导致编译错误。

复制构造函数

复制构造器 是一种特殊的构造器,用于通过复制同一类的现有对象的字段来创建新对象。

阅读更多 Java 中的复制构造器

注意: 与 C++ 不同,Java 不提供默认复制构造器。我们可以创建自己的构造器,它复制作为参数传递的同一类对象的字段。

示例:复制构造器

编译并运行

输出

 
ID: 102546, Name: Henry
ID: 102546, Name: Henry  

构造器选择题

1. 如果 Java 类中没有定义构造器,会发生什么?

  1. Java 提供了一个默认构造器
  2. 编译错误
  3. 对象无法创建
  4. Java 提供了一个复制构造器
 

答案:a

解释: 如果没有显式定义构造器,Java 会自动提供一个不带参数的默认构造器,该构造器将对象成员初始化为其默认值,例如 0、null 或 false。


2. 关于无参构造器,哪个说法是正确的?

  1. 它与默认构造器相同
  2. 它必须显式定义
  3. 它不能被重载
  4. 它返回一个对象
 

答案:a

解释: 无参构造器是一个没有参数的构造器。如果显式定义,它会替换默认构造器。否则,Java 会隐式提供一个。


3. 为什么会使用参数化构造器?

  1. 用默认值初始化对象
  2. 重载方法
  3. 用特定值初始化对象
  4. 复制另一个对象
 

答案:c

解释: 参数化构造器允许在创建对象时传递参数,从而可以自定义初始化字段。


4. Java 中复制构造器的目的是什么?

  1. 克隆对象
  2. 将值从一个对象复制到另一个对象
  3. 继承超类构造器
  4. 返回一个新对象
 

答案:b

解释: Java 不提供内置的复制构造器,但您可以手动定义一个来将值从现有对象复制到新对象。这对于深拷贝很有用。


5. 关于 Java 中的复制构造器,以下哪个说法是正确的?

  1. Java 提供了一个内置的复制构造器
  2. 复制构造器仅用于浅拷贝
  3. 您必须手动定义复制构造器
  4. 复制构造器是继承的
 

答案:c

解释: Java 不提供内置的复制构造器。我们手动定义一个来从现有对象复制值,通常用于深拷贝。


下一主题Java vs PHP