Descripción del problema:
Java crea una instancia de una clase. Si esta clase no solo tiene un constructor, sino también un bloque de código, un bloque de código estático y una instancia de otra clase que se inicializa in situ, ¿cuál es el orden de ejecución del código?
Muestras y resultados de ejecución
clase de gente
package Extends;
import Dog.Dog;
class people {
public int age=100;
public String name;
Dog dog=new Dog();
public people() {
System.out.println("people");
}
{
System.out.println("people的代码块");
}
static {
System.out.println("people中的静态代码块");
}
}
clase de perro
public class Dog {
String name;
int age;
public Dog(){
name="大黄";
age=3;
System.out.println("dog的初始化");
}
}
Función principal
public class Main {
public static void main(String[] args) {
people p1=new people();
System.out.println("---------");
people p2=new people();
}
}
Análisis de causa:
Aquí, en la clase de personas, no solo hay bloques de código, bloques de código estático y métodos de construcción, sino que también se inicializa una instancia de perro en el lugar. De los resultados, podemos ver que la ejecución del bloque de código estático es siempre la el primero, pero una vez ejecutado, el siguiente nivel es: inicialización en el lugar y bloque de código. Quien escriba los dos ejecutará el primero, y el último es el método de construcción.
import Dog.Dog;
class people {
public int age=100;
public String name;
public people() {
System.out.println("people");
}
{
System.out.println("people的代码块");
}
static {
System.out.println("people中的静态代码块");
}
Dog dog=new Dog();
}
En este momento, la construcción de perro está después del bloque de código.