首页 > 编程笔记

Java构造方法详解

构造方法是类中的特殊方法,用于封装对象属性的初始化过程,在使用运算符 new 创建对象时自动调用。

构造方法的语法格式如下:
[访问控制修饰符] 构造方法名(){
    //方法体
}

下图展示了构造方法的用法:


图 1 构造方法的示意图

如图 1 所示,构造方法中封装了初始化对象属性的代码。当通过运算符 new 创建一个 Person 对象时,会自动调用这个构造方法,其中的代码会被执行。因此,创建好的 Person 对象中的 3 个属性已经有了具体的值,不再需要编写重复性的赋值语句。

有些读者会想到一个问题,在构造方法中为属性指定的初始值是固定的,通过该构造方法创建的所有对象都有相同的属性值,这其实并不符合现实的需求。现实的需求是便捷地创建具有不同初始值的对象,封装每个对象独有的特征。Java 提供的有参构造方法可以实现这一需求。

Java有参构造方法

Java 支持带有参数的构造方法称为有参构造方法或带参构造器。有参构造方法的作用是利用参数初始化对象的属性。有参构造方法的语法格式如下:
[访问控制修饰符] 构造方法名(参数列表){
    //方法体
}
下图展示了有参构造方法的用法:


图 2 有参构造方法的示意图

有参数构造方法的好处是可以复用参数赋值过程,如下图所示:


图 3 复用参数赋值过程

Java默认构造方法

细心的读者会发现,在类中没有声明任何构造方法时,也可以使用运算符 new 创建对象,此时调用的是哪个构造方法呢?Java 为简化开发者的编码操作,对构造方法设计了如下机制。

如果类中没有编写构造方法,那么编译器会默认为该类添加一个无参数、方法体为空的构造方法,即默认添加一个空的无参构造方法。如果类中定义了一个或多个构造方法,那么编译器将不再提供默认的构造方法。

例如,下面的 Point 类中声明了一个有参构造方法,此时使用 new Point() 创建对象会报错,这是因为该类中没有无参构造方法:
class Point{
    double x,y;
    Point(double x_, double y_){
        x = x_;
        y = y_;
    }
}

Java构造方法重载

构造方法重载是指在一个类中同时声明多个参数不同的构造方法。

构造方法重载的好处是可以有更多的对象创建方式,使用起来更加灵活方便。

下图演示了构造方法重载的过程:


图 4 构造方法重载的示意图

推荐阅读