java如何构造函数
构造函数的基本概念
构造函数是一种特殊的方法,用于在创建对象时初始化对象的状态。构造函数的名称必须与类名完全相同,且没有返回类型(包括 void)。
默认构造函数
如果类中没有显式定义构造函数,Java 会自动提供一个无参数的默认构造函数。默认构造函数会将成员变量初始化为默认值(如 int 初始化为 0,对象初始化为 null)。
public class Person {
private String name;
private int age;
// 默认构造函数(如果没有显式定义,Java 会自动生成)
public Person() {
name = "Unknown";
age = 0;
}
}
带参数的构造函数
可以通过定义带参数的构造函数,在创建对象时直接传入初始值。

public class Person {
private String name;
private int age;
// 带参数的构造函数
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
构造函数重载
一个类可以有多个构造函数,只要它们的参数列表不同(数量或类型不同),这称为构造函数重载。
public class Person {
private String name;
private int age;
// 无参构造函数
public Person() {
name = "Unknown";
age = 0;
}
// 带一个参数的构造函数
public Person(String name) {
this.name = name;
age = 0;
}
// 带两个参数的构造函数
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
调用其他构造函数
使用 this() 可以在一个构造函数中调用另一个构造函数,但 this() 必须是构造函数的第一条语句。

public class Person {
private String name;
private int age;
// 无参构造函数调用带参数的构造函数
public Person() {
this("Unknown", 0); // 调用下面的构造函数
}
// 带参数的构造函数
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
私有构造函数
如果构造函数被声明为 private,则该类不能被外部直接实例化,通常用于单例模式或工具类。
public class Singleton {
private static Singleton instance;
// 私有构造函数
private Singleton() {}
// 提供静态方法获取实例
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
构造函数的继承
子类不会继承父类的构造函数,但可以通过 super() 调用父类的构造函数。如果没有显式调用 super(),Java 会自动调用父类的无参构造函数。
public class Animal {
private String type;
public Animal(String type) {
this.type = type;
}
}
public class Dog extends Animal {
private String name;
public Dog(String type, String name) {
super(type); // 调用父类的构造函数
this.name = name;
}
}
构造函数的注意事项
- 构造函数的名称必须与类名完全相同。
- 构造函数没有返回类型(包括
void)。 - 如果没有定义任何构造函数,Java 会提供默认的无参构造函数。
- 如果定义了带参数的构造函数,Java 不会再提供默认的无参构造函数。
- 构造函数可以重载,但参数列表必须不同。
this()或super()必须放在构造函数的第一行。






