从一个java小程序看java的初始化流程 简介 code answer TIPS

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() + ", + e.getSalary());
		}
	}
}

class Employee{
	private static int nextId;
	
	private int id;
	private String name = "";
	private double salary;
	
	// static initialization block
        static
	{
		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
nextId++
constr n s
sss
nextId++
mo ren
name=Harry,id=3574,salary=40000.0
name=Employee #3575,id=3575,salary=60000.0
name=,id=3576,salary=0.0

TIPS

首先构造一个对象的时候先构造了static块内容会先执行
然后是 独立块 {} 内容执行
然后是构造函数的执行 bingo~