首页 > 编程笔记 > Java笔记 阅读:44

Java类的构造方法(非常详细)

Java 类中有一种非常特殊的方法,它会在创建对象时自动被调用,通常用于对象的初始化工作,它就是构造方法。

定义一个构造方法的语法如下:
访问修饰符 方法名(参数列表) {
    方法体
}
首先是访问修饰符(非必需的)。然后是方法名和参数列表,其中方法名必须与类名相同,如果要定义无参的构造方法则直接使用()即可。最后是方法体,由一对大括号指定,所有初始化语句都在大括号内编写。

构造方法有如下特点:
假设有一个 Student 类,它包含 id、age 和 name 三个属性。观察下面的实例程序。
public class Student {
    int id;
    int age;
    String name;
     
    public Student(int id, int age, String name) {
        this.id = id;
        this.age = age;
        this.name = name;
    }
}
程序中定义了一个包含三个参数的构造方法,可以看到它的名字 Student 与类名是相同的,传入的三个参数值分别赋值给构造的对象的 id、age、name 这三个属性。

当我们要创建“xiaoming”对象时,可以通过下面的语句实现:
Student xiaoming = new Student("小明");
传入的三个参数值会分别赋值给“xiaoming”对象的三个属性。

一个类可以包含多个构造方法,它们的方法名相同,只是参数列表不同而已,如下面的程序所示:
public class Student {
    int id;
    int age;
    String name;

    public Student() {
    }

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

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

    public static void main(String[] args) {
        Student xiaoming = new Student("小明");
        Student xiaodong = new Student("小东");
        Student somebody = new Student();
    }
}
可以看到第一个构造方法不包含任何参数,第二个只包含 id 和 name 两个参数,第三个则包含了 id、age 和 name 三个参数。

当执行 new 指令创建对象时,可以根据实际情况传入不同的参数,比如主方法中分别使用了三种构造方法。注意,当我们不传入任何参数值给构造方法时,生成的对象的属性都为默认值,比如“new Student()”,生成对象的 id、age、name 三个属性的值分别为 0、0、null。

Java默认构造方法

有时我们会看到某些类没有定义任何构造方法,是不是就意味着不能创建该类的对象呢?
public class Teacher {
    public int age;
    public String name;
}
观察上面的 Teacher 类,该类仅定义了 age 和 name 两个属性,没有定义任何构造方法,那么我们能不能通过“new Teacher();”来创建对象呢?

实际上,如果我们没有定义任何构造方法,那么 Java 编译器会帮我们加上一个默认的无参构造方法。如下图所示,Teacher 类通过编译器编译后就会被加上一个默认的构造方法。


图 1 默认构造方法

不过编译器并非总是会帮我们加上无参构造方法,例如:
public class Teacher {
    public int age;
    public String name;

    public Teacher(int age, String name) {
        this.age = age;
        this.name = name;
    }
}
我们已经定义了一个有参构造方法,这时编译器就不会再帮我们生成无参构造方法,如果我们使用“new Teacher();”将会报错。

所以可以总结一下,一旦我们定义了任意一个构造方法,编译器就不会再帮我们生成默认构造方法,此时对于要用到的所有构造方法,都需要我们自己去定义。

Java构造方法和成员方法的区别

构造方法与成员方法非常相似,不过它们之间也有一些区别。关于构造方法和成员方法,我们通过下表来进行一个对比总结,这样就能更好地理解它们。

表:构造方法与成员方法
对比项 构造方法 成员方法
作用 用于在创建一个对象时对其进行初始化 用于暴露某个对象的行为操作以供调用
命名 必须与类名相同 根据需要自定义
返回值 不能定义返回值 必须定义返回值
调用时机 执行 new 时隐式地调用 编程者显式地调用

相关文章