当前位置:网站首页 > 技术博客 > 正文

构造器(构造方法)



廖雪峰
资深软件开发工程师,业余马拉松选手。

创建实例的时候,我们经常需要同时初始化这个实例的字段,例如:

初始化对象实例需要3行代码,而且,如果忘了调用或者,这个实例内部的状态就是不正确的。

能否在创建对象实例时就把内部字段全部初始化为合适的值?

完全可以。

这时,我们就需要构造方法。

创建实例的时候,实际上是通过构造方法来初始化实例的。我们先来定义一个构造方法,能在创建实例的时候,一次性传入和,完成初始化:

由于构造方法是如此特殊,所以构造方法的名称就是类名。构造方法的参数没有限制,在方法内部,也可以编写任意语句。但是,和普通方法相比,构造方法没有返回值(也没有),调用构造方法,必须用操作符。

是不是任何都有构造方法?是的。

那前面我们并没有为类编写构造方法,为什么可以调用?

原因是如果一个类没有定义构造方法,编译器会自动为我们生成一个默认构造方法,它没有参数,也没有执行语句,类似这样:

要特别注意的是,如果我们自定义了一个构造方法,那么,编译器就不再自动创建默认构造方法:

如果既要能使用带参数的构造方法,又想保留不带参数的构造方法,那么只能把两个构造方法都定义出来:

没有在构造方法中初始化字段时,引用类型的字段默认是,数值类型的字段用默认值,类型默认值是,布尔类型默认值是:

也可以对字段直接进行初始化:

那么问题来了:既对字段进行初始化,又在构造方法中对字段进行初始化:

当我们创建对象的时候,得到的对象实例,字段的初始值是啥?

在Java中,创建对象实例的时候,按照如下顺序进行初始化:

  1. 先初始化字段,例如,表示字段初始化为,表示字段默认初始化为,表示引用类型字段默认初始化为;
  2. 执行构造方法的代码进行初始化。

因此,构造方法的代码由于后运行,所以,的字段值最终由构造方法的代码确定。

可以定义多个构造方法,在通过操作符调用的时候,编译器通过构造方法的参数数量、位置和类型自动区分:

如果调用,会自动匹配到构造方法。

如果调用,会自动匹配到构造方法。

如果调用,会自动匹配到构造方法。

一个构造方法可以调用其他构造方法,这样做的目的是便于代码复用。调用其他构造方法的语法是:

请给类增加的构造方法:

下载练习

实例在创建时通过操作符会调用其对应的构造方法,构造方法用于初始化实例;

没有定义构造方法时,编译器会自动创建一个默认的无参数构造方法;

可以定义多个构造方法,编译器根据参数自动判断;

可以在一个构造方法内部调用另一个构造方法,便于代码复用。

版权声明


相关文章:

  • 交叉验证的几种方法2024-10-30 14:01:52
  • 神奇代码什么意思2024-10-30 14:01:52
  • 操作系统习题(操作系统--精髓与设计原理课后复习题答案)2024-10-30 14:01:52
  • 网络设备有哪些(常见的网络设备有哪些?)2024-10-30 14:01:52
  • 《java游戏编程开发教程》2024-10-30 14:01:52
  • ulimit命令详解2024-10-30 14:01:52
  • 应用层协议及功能2024-10-30 14:01:52
  • fread函数和fwrite函数2024-10-30 14:01:52
  • es6新特性有哪些?在哪里使用2024-10-30 14:01:52
  • post请求的数据在消息主体2024-10-30 14:01:52