🐿️构造方法
2021-3-5
| 2023-8-3
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property
 
 
创建实例的时候经常需要同时初始化这个实例的字段,例如:
初始化对象实例需要3行代码,如果忘了调用setName()或者setAge(),这个实例内部的状态就是不正确的。
 
能否在创建对象实例时就把内部字段全部初始化为合适的值?
完全可以,这时就需要构造方法。

构造方法

创建实例的时候,实际上是通过构造方法来初始化实例的。
构造方法的名称就是类名。构造方法的参数没有限制,在方法内部可以编写任意语句。和普通方法相比,构造方法没有返回值(也没有void),调用构造方法,必须用new操作符。
 
定义一个构造方法,能在创建Person实例的时候,一次性传入nameage,完成初始化:
 
 

默认构造方法

是不是任何class都有构造方法?是的。
如果一个类没有定义构造方法,编译器会自动生成一个默认构造方法,它没有参数,也没有执行语句,类似这样:
如果自定义了一个构造方法,编译器就不再自动创建默认构造方法。
 
如果既要能使用带参数的构造方法,又想保留不带参数的构造方法,那么只能把两个构造方法都定义出来:
 
 
没有在构造方法中初始化字段时,引用类型的字段默认是null,数值类型的字段用默认值,int类型默认值是0,布尔类型默认值是false
也可以对字段直接进行初始化:
那么问题来了:既对字段进行初始化,又在构造方法中对字段进行初始化:
创建对象的时候,new Person("Xiao Ming", 12)得到的对象实例,字段的初始值是啥?
在Java中,创建对象实例的时候,按照如下顺序进行初始化:
  1. 先初始化字段,例如,int age = 10;表示字段初始化为10double salary;表示字段默认初始化为0String name;表示引用类型字段默认初始化为null
  1. 执行构造方法的代码进行初始化。
构造方法的代码由于后运行,所以new Person("Xiao Ming", 12)的字段值最终由构造方法的代码确定。
 
 

多构造方法

可以定义多个构造方法,通过new操作符调用时,编译器通过构造方法的参数数量、位置和类型自动区分:
调用new Person("Xiao Ming", 20);,匹配到构造方法public Person(String, int) ;调用new Person("Xiao Ming");,匹配到public Person(String) ;调用new Person();,匹配到public Person()
 
一个构造方法可以调用其他构造方法,这样做的目的是便于代码复用,调用其他构造方法的语法是this(…)
  • Java
  • 封装继承 extends
    目录