java如何构造函数
构造函数的基本概念
构造函数是用于初始化对象的特殊方法,名称必须与类名完全相同,没有返回类型(包括void)。当创建对象时,构造函数会自动调用。
public class Person {
private String name;
private int age;
// 构造函数
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
默认构造函数
如果未显式定义构造函数,Java会提供一个无参数的默认构造函数。若定义了任何构造函数,默认构造函数不再自动生成。
public class Person {
private String name;
// 若未定义其他构造函数,Java会提供默认的 public Person() {}
}
构造函数重载
一个类可以有多个构造函数,通过参数列表区分(重载)。根据传入参数的不同,调用对应的构造函数。

public class Person {
private String name;
private int age;
// 无参构造函数
public Person() {
this.name = "Unknown";
this.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;
}
}
构造函数的访问修饰符
构造函数可以设置为public、protected、private或默认(包私有)。例如,单例模式中常用private构造函数限制实例化。

public class Singleton {
private static Singleton instance;
private Singleton() {} // 私有构造函数
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
继承中的构造函数
子类构造函数默认调用父类的无参构造函数(通过super())。若父类没有无参构造函数,必须显式调用父类的带参构造函数。
public class Animal {
private String type;
public Animal(String type) {
this.type = type;
}
}
public class Dog extends Animal {
public Dog() {
super("Dog"); // 必须显式调用父类构造函数
}
}
初始化块
静态初始化块(static {})和实例初始化块({})会在构造函数之前执行,用于完成额外初始化逻辑。
public class Example {
private static int staticVar;
private int instanceVar;
// 静态初始化块
static {
staticVar = 10;
}
// 实例初始化块
{
instanceVar = 20;
}
public Example() {
System.out.println(staticVar + ", " + instanceVar);
}
}






