简介
java的构造函数执行顺序深究
code
package test1;
import java.util.*;
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();
// print out information about all Employee objects
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 initialization block
{
Random generator = new Random();
nextId = generator.nextInt(10000);
System.out.println("static");
}
{
id = nextId;
nextId++;
System.out.println("nextId++");
}
public Employee(String n, double s){
name = n;
salary = s;
System.out.println("constr n s");
}
public Employee(double s) {
this("Employee #" + nextId, s);
System.out.println("sss");
}
public Employee(){
System.out.println("mo ren");
}
public String getName(){
return name;
}
public double getSalary() {
return salary;
}
public int getId() {
return id;
}
}
answer
static
nextId++
constr n s
static
nextId++
constr n s
sss
static
nextId++
mo ren
name=Harry,id=5175,salary=40000.0
name=Employee #5176,id=5063,salary=60000.0
name=,id=5920,salary=0.0
TIPS
首先构造一个对象的时候先构造了static块内容会先执行
然后是 独立块 {} 内容执行
然后是构造函数的执行 bingo~