构造器中有this调用构造器会先运行this还是先运行初始化代码块

package com.itheima.demo;

import java.util.*;

/**

  • This program demonstrates object construction.
  • @version 1.01 2004-02-19
  • @author Cay Horstmann
    */
    public class ConstructorTest
    {
    public static void main(String[] args)
    {
    // fill the staff array with three Employee objects
    Employee[] staff = new Employee[3];

    staff[0] = new Employee("Harry", 40000);
    System.out.println();
    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 = ""; // instance field initialization
private double salary;

// static initialization block
static
{
Random generator = new Random();
// set nextId to a random number between 0 and 9999
nextId = generator.nextInt(10000);
}

// object initialization block
{
id = nextId;
nextId++;
}

// three overloaded constructors
public Employee(String n, double s)
{
name = n;
salary = s;
}

public Employee(double s)
{

  // calls the Employee(String, double) constructor
  this("Employee #" + nextId, s);
  System.out.println(Employee.nextId);

}

// the default constructor
public Employee()
{
// name initialized to ""--see above
// salary not explicitly set--initialized to 0
// id initialized in initialization block
}

public String getName()
{
return name;
}

public double getSalary()
{
return salary;
}

public int getId()
{
return id;
}
}
图片说明

图片说明

图中#1402是nextId,如果创建对象时先运行初始化代码块,此时不是应该是nextId=1403吗?

静态(你加了static)构造块只会执行一次。一般构造块先执行,然后调用你构造函数,构造函数又调用了另一个构造函数。
所以1204 1204 1205,没毛病,你说的1403是什么鬼。