Java学习打卡day4
完整代码:
import java.util.Random;
public class ConstructorTest {
public static void main(String[] args) {
Employee[] staff = new Employee[3];
//分别调用三个不同的构造器
staff[0] = new Employee("Harry", 40000);
staff[1] = new Employee(60000);
staff[2] = new Employee();
//打印所有的Employee对象的信息
for (Employee e : staff){
System.out.println("name = " + e.getName() + " id = " + e.getId() + " salary = " + e.getSalary());
}
}
}
class Employee{
private static int nextId;
private int id;
private String name = "";
private double salary;
//静态初始化块
static{
Random generator = new Random();
//将nextId设置为0-9999的随机整数
nextId = generator.nextInt(10000);
}
//对象初始化块
{
id = nextId;
nextId++;
}
//三个不同的构造器(重载)
public Employee(String n, double s){
name = n;
salary = s;
}
//调用另外一个构造器
public Employee(double s){
this("Employee # " + nextId, s);
}
public Employee(){
}
public int getId(){
return id;
}
public String getName(){
return name;
}
public double getSalary(){
return salary;
}
}
重载
一个类有多个构造器,如果多个方法出现了相同的名字、不同的参数、便出现了重载。
//重载
public Employee(String n, double s){
name = n;
salary = s;
}
public Employee(double s){
this("Employee #" + nextId , s);
}
public Employee(){
}
编译器必须选出具体调用哪个方法,它用各个方法首部中的参数类型与特定方法调用中所使用的值类型进行匹配。比如:
staff[0] = new Employee("Harry", 40000);
staff[1] = new Employee(60000);
staff[2] = new Employee();
无参构造器:无参构造器在创建对象的时候,对象的状态会设置成适合的初始值。如果一个类没有写无参构造器时,会自动的为你提供一个无参构造器。如果一个类至少提供了一个有参数的构造器,那么想调用无参构造器,则需要自己再添加一个无参构造器



