第20天

2023/6/15

# 第20天

# Java 构造方法

# 构造方法的类型

Java 中的构造方法分为两种类型:无参构造方法和有参构造方法。

//1、无参构造方法(默认构造方法)
public class Person {
    public Person() {
        System.out.println("Person对象已创建");
    }
}

//2、有参构造方法
public class Person {
    String name;
    int age;

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

//构造方法的重载
public class Person {
    String name;
    int age;

    public Person() {
        this.name = "Unknown";
        this.age = 0;
    }

    public Person(String name) {
        this.name = name;
        this.age = 0;
    }

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

# 构造方法中的 this 关键字

在构造方法中,this 关键字通常用于两种情况:

1、引用当前对象的属性或方法:当构造方法的参数名与类属性名相同时,使用 this 来区分类属性和参数。例如:

2、调用另一个构造方法:可以使用 this() 调用当前类的其他构造方法,常用于避免重复代码,但必须放在构造方法的第一行。

public Person(String name, int age) {
    this.name = name; // this.name 表示类的属性
    this.age = age;
}


public Person(String name) {
    this(name, 0); // 调用另一个双参数的构造方法
}

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

Java 构造方法是一种特殊的方法,用于在创建对象时初始化对象的属性。构造方法与类同名,并且没有返回类型。每个类至少有一个构造方法,如果没有显式定义,Java 编译器会提供一个默认的无参构造方法。

# 构造方法的用途

  1. 初始化对象属性:在创建对象时,构造方法可以用来初始化对象的属性。
  2. 执行一些必要的操作:构造方法可以在对象创建时执行一些必要的操作,比如打开文件、建立数据库连接等。

# 构造方法的定义

构造方法与类同名,并且没有返回类型。例如:

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;
    }
}

# 构造方法的注意事项

  1. 构造方法不能被显式调用:构造方法不能通过对象名调用,只能在创建对象时由 Java 虚拟机自动调用。
  2. 构造方法可以重载:一个类可以有多个构造方法,只要它们的参数列表不同即可。
  3. 构造方法可以调用其他构造方法:通过 this() 关键字可以在一个构造方法中调用另一个构造方法。

# 示例

public class Main {
    public static void main(String[] args) {
        // 使用无参构造方法创建对象
        Person person1 = new Person();
        System.out.println(person1.getName() + ", " + person1.getAge());

        // 使用带参数的构造方法创建对象
        Person person2 = new Person("Alice", 30);
        System.out.println(person2.getName() + ", " + person2.getAge());
    }
}