1、重载
就是一个构造器(方法也可以)有多个同名的实现,构造对象的时候,根据参数判断具体使用哪一个。
2、默认字段初始化
如果构造器中没有显式地为字段设置初始值。
- 数值为0
- 布尔型为false
- 对象引用为null
3、无参数构造器
- 不需要传递参数
- 如果不自己写一些初始化值,就按照默认字段初始化
public Employee(){
// 这里不设置就按第二部分的默认值进行初始化
name = "";
salary = 0;
hireDay = LocalDate.now(); // 静态工厂方法构造对象
}
4、显式字段初始化
- 在类定义中直接为字段赋值
class Employee{
private String name = "";
}
- 初始化值还可以用方法填充
class Employee{
private static int nextId;
private int id = assignId();
private static int assignId(){
int r = nextId;
nextId++;
return r;
}
}
5、this
- 参数变量会遮蔽同名的实例字段。(实例字段:https://www.jianshu.com/p/36ba065d1624)
- this可以指示隐式参数,构造的对象
public Employee(String name, double salary){
this.name = name; // this就是隐式参数(隐式参数:https://www.jianshu.com/p/4aa648e19b5a)
this.salary = salary;
}
- this还可以调用同一个类的另一个构造器
public Employee(double s){
// 调用另外一个Employee(String, double)构造器
this("Employee #" + nextId, s);
nextId++;
}
6、初始化块
- 初始化块会在构造器运行之前运行
{
id = nextId;
nextId++;
}
- 静态初始化块可以初始化静态字段
static{
var generator = new Random();
nextId = generator.nextInt(10000);
}
网友评论