Inicializar Bloques de Código

Clase Persona

package bloque.codigo;
public class Persona {
    private final int idPersona;
    private static int contadorPersona;
    
    /*Bloque de código estaticos 
    * Para inicializar los atributos staticos 
    * Se tiene que llamar antes del constructor
    * Se ejecuta cuando se carga en memoria 
    */
    static {
        System.out.println("Ejecución bloque estatico");
        ++Persona.contadorPersona;
        //idPersona = 10;
    }
    
    /*Bloque de codigo no estaticos o dinamicos 
    * Se ejecuta cada ves que se manda llamar el objeto 
    * Se ejecuta antes de constructor 
    * Es para inicializar atributos no estaticos 
    */
    {
        System.out.println("Ejecución bloque de código");
        this.idPersona = Persona.contadorPersona++;
    }
    public Persona() {
        System.out.println("Ejecución del constructor");
    }
    
    public int getIdPersona() {
        return idPersona;
    }
}

Clase TestClase

package bloque.codigo;
public class TestClase {
    public static void main(String[] args) {
        Persona persona1 = new Persona();
        System.out.println(persona1);
        
        Persona persona2 = new Persona();
        System.out.println(persona2);
    }
}