Java 构造方法

一、什么是构造方法

构造方法是专门用来创建对象、初始化对象成员变量的特殊方法。
执行时机:执行 new 类名() 时,JVM 自动调用,只在创建对象时执行一次

二、构造方法硬性特征(必背)

  1. 方法名必须和类名完全一致(大小写都要相同)
  2. 没有返回值,连 void 都不能写
  3. 不能手动调用,只能 new 对象时自动触发
  4. 可以重载(多个构造方法,参数列表不同)

错误示范

// 错误1:加了void
public void Person(){}
// 错误2:方法名和类名不一样
public void per(){}

三、两种构造方法

1. 默认无参构造(隐式构造)

  • 如果你一个构造方法都不写,编译器会自动生成一个:
public Person(){
}
  • 一旦你手写了有参构造,编译器不再提供默认无参构造,此时再写 new Person() 会直接报错。

示例:

public class Person {
    String name;
    // 只写了有参构造
    public Person(String n){
        name = n;
    }
}
// 测试
Person p1 = new Person("张三"); // 正常
Person p2 = new Person(); // 编译报错,找不到无参构造

2. 显式构造(自己写)

分为无参构造、有参构造,支持重载。

public class Student {
    String name;
    int age;

    // 无参构造
    public Student(){
        System.out.println("无参构造执行");
    }

    // 单参构造
    public Student(String n){
        name = n;
    }

    // 双参构造
    public Student(String n, int a){
        name = n;
        age = a;
    }
}

四、this() 在构造方法中互相调用

this(参数) 表示调用本类其他构造方法,有两条强制规则:

  1. 必须写在构造方法第一行
  2. 不能互相循环调用(死递归,编译报错)
public class Student {
    String name;
    int age;

    // 无参构造调用双参构造
    public Student(){
        this("默认姓名", 18); // 第一行
    }

    public Student(String name, int age){
        this.name = name;
        this.age = age;
    }
}

五、构造方法作用

  1. 创建对象时给成员变量赋初始值,简化代码
  2. 强制创建对象时必须传入某些参数(比如用户必须有姓名)
  3. 统一对象初始化逻辑(多个构造通过 this() 复用代码)

六、构造方法 vs 普通成员方法

对比项 构造方法 普通成员方法
方法名 和类名相同 自定义名称
返回值 无,不能写void 必须有返回值/void
调用时机 new 对象时自动执行 对象.方法()手动调用
执行次数 一个对象只执行1次 可调用任意次
this调用 可用this()调用其他构造 不能用this()

七、完整实操案例

public class Dog {
    // 成员变量
    private String dogName;
    private String color;

    // 无参构造
    public Dog() {
        this("小黑", "黑色"); // 调用双参构造
    }

    // 有参构造1
    public Dog(String dogName) {
        this(dogName, "灰色");
    }

    // 有参构造2(核心初始化)
    public Dog(String dogName, String color) {
        this.dogName = dogName;
        this.color = color;
    }

    // 输出信息
    public void show() {
        System.out.println("名字:" + dogName + ",颜色:" + color);
    }
}

class TestDog {
    public static void main(String[] args) {
        Dog d1 = new Dog();
        d1.show(); // 名字:小黑,颜色:黑色

        Dog d2 = new Dog("旺财");
        d2.show(); // 名字:旺财,颜色:灰色

        Dog d3 = new Dog("柯基", "黄白");
        d3.show(); // 名字:柯基,颜色:黄白
    }
}

八、常见考点总结

  1. 没写任何构造 → 编译器自动提供公共无参构造
  2. 写了有参构造 → 无参构造消失,需要手动补充
  3. this() 只能在构造第一行,不能和普通方法混用
  4. 构造方法不能被 static/final/abstract 修饰
  5. 构造方法不能有返回值,区别普通方法
posted @ 2026-06-27 15:04  XIAOMUZO  阅读(0)  评论(0)    收藏  举报