Java构造方法详解
构造方法是类中的特殊方法,用于封装对象属性的初始化过程,在使用运算符 new 创建对象时自动调用。
构造方法的语法格式如下:
下图展示了构造方法的用法:
图 1 构造方法的示意图
如图 1 所示,构造方法中封装了初始化对象属性的代码。当通过运算符 new 创建一个 Person 对象时,会自动调用这个构造方法,其中的代码会被执行。因此,创建好的 Person 对象中的 3 个属性已经有了具体的值,不再需要编写重复性的赋值语句。
有些读者会想到一个问题,在构造方法中为属性指定的初始值是固定的,通过该构造方法创建的所有对象都有相同的属性值,这其实并不符合现实的需求。现实的需求是便捷地创建具有不同初始值的对象,封装每个对象独有的特征。Java 提供的有参构造方法可以实现这一需求。
图 2 有参构造方法的示意图
有参数构造方法的好处是可以复用参数赋值过程,如下图所示:
图 3 复用参数赋值过程
如果类中没有编写构造方法,那么编译器会默认为该类添加一个无参数、方法体为空的构造方法,即默认添加一个空的无参构造方法。如果类中定义了一个或多个构造方法,那么编译器将不再提供默认的构造方法。
例如,下面的 Point 类中声明了一个有参构造方法,此时使用 new Point() 创建对象会报错,这是因为该类中没有无参构造方法:
构造方法重载的好处是可以有更多的对象创建方式,使用起来更加灵活方便。
下图演示了构造方法重载的过程:
图 4 构造方法重载的示意图
构造方法的语法格式如下:
[访问控制修饰符] 构造方法名(){ //方法体 }
- 构造方法也称为构造器,方法名与类的名称必须严格一致,包括大小写也必须一致;
- 构造方法不能定义返回值的类型,包括 void;
- 构造方法只能与运算符 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 构造方法重载的示意图