Bloque de código (o bloque de inicialización) de miembros de la clase

1. La función del bloque de código: se utiliza para inicializar clases y objetos
 * 2. Si el bloque de código se modifica, solo puede ser estático.
 * 3. Clasificación: bloque de código estático vs bloque de código no estático
 * 
 * 4. Estático bloque de código
 *> Puede haber declaraciones de salida dentro
 *> ejecutadas con la carga de la clase, y solo ejecutadas una vez
 *> Función: inicializar la información de la clase
 *> Si se definen varios bloques de código estático en una clase, serán ejecutado en el orden de declaración
 *> La ejecución de bloques de código estático debe tener prioridad sobre la ejecución de bloques de código no estático
 *> Los bloques de código estático solo pueden llamar a propiedades estáticas y métodos estáticos, y no pueden llamar a estructuras no estáticas
 * 
 * 5 . Bloques de código no estático
 *> Interno puede tener Declaración de salida
 *> Ejecutado con la creación del objeto
 *> Cada vez que se crea un objeto, se ejecuta un bloque de código no estático
 *> Función: Puede inicializar las propiedades del objeto cuando se crea el objeto
 *> Si se define en una clase Se ejecutan varios bloques de código no estático en el orden de declaración
 *> Propiedades estáticas, métodos estáticos o propiedades no estáticas y métodos no estáticos se pueden llamar en bloques de código estático

public class BlockTest {
	public static void main(String[] args) {
		
		String desc = Person.desc;
		System.out.println(desc);
		
		Person p1 = new Person();
		Person p2 = new Person();
		System.out.println(p1.age);
		
		Person.info();
	}
}


class Person{
	//属性
	String name;
	
	int age;

	static String desc = "我是一个人";
	
	//构造器
	public Person(){
		
	}
	public Person(String name,int age){
		this.name = name;
		this.age = age;
	}
	
	//非static的代码块
	{
		System.out.println("hello, block - 2");
	}
	{
		System.out.println("hello, block - 1");
		//调用非静态结构
		age = 1;
		eat();
		//调用静态结构
		desc = "我是一个爱学习的人1";
		info();
	}
	//static的代码块
	static{
		System.out.println("hello,static block-2");
	}
	static{
		System.out.println("hello,static block-1");
		//调用静态结构
		desc = "我是一个爱学习的人";
		info();
		//不可以调用非静态结构
//		eat();
//		name = "Tom";
	}
	
	//方法
	public void eat(){
		System.out.println("吃饭");
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	public static void info(){
		System.out.println("我是一个快乐的人!");
	}
	
}

 hola, bloque estático-2
hola, bloque estático-1
¡Soy una persona feliz!
Soy una persona a la que le encanta aprender
hola, bloque 2
hola, bloque 1
comer
¡Soy una persona feliz!
hola, bloque-2
hola, bloque-1
Comer
¡Soy una persona feliz!
1
¡Soy una persona feliz!

De padre e hijo, estática primero

//总结:由父及子,静态先行
class Root{
	static{
		System.out.println("Root的静态初始化块");
	}
	{
		System.out.println("Root的普通初始化块");
	}
	public Root(){
		super();
		System.out.println("Root的无参数的构造器");
	}
}
class Mid extends Root{
	static{
		System.out.println("Mid的静态初始化块");
	}
	{
		System.out.println("Mid的普通初始化块");
	}
	public Mid(){
		super();
		System.out.println("Mid的无参数的构造器");
	}
	public Mid(String msg){
		//通过this调用同一类中重载的构造器
		this();
		System.out.println("Mid的带参数构造器,其参数值:"
			+ msg);
	}
}
class Leaf extends Mid{
	static{
		System.out.println("Leaf的静态初始化块");
	}
	{
		System.out.println("Leaf的普通初始化块");
	}	
	public Leaf(){
		//通过super调用父类中有一个字符串参数的构造器
		super("尚硅谷");
		System.out.println("Leaf的构造器");
	}
}
public class LeafTest{
	public static void main(String[] args){
		new Leaf(); 
		System.out.println();
		new Leaf();
	}
}

Bloque de Root estática inicialización
bloque de inicialización estática de mediana
inicialización estática de Leaf bloque
de Root bloque de inicialización normales
de Root sin parámetros constructor
de mediana bloque de inicialización normales
de mediana sin parámetros constructor
de mediana constructor sin parámetros, su valor de parámetro:
El bloque de inicialización normal de
la hoja de constructor de Silicon Valley Leaf

Bloque de inicialización normal de
Root Constructor sin parámetros de Root Bloque de inicialización normal de
Mid Constructor sin parámetros de Mid Constructor
de parámetros de
Mid, su valor de parámetro:
el bloque de inicialización normal
Constructor Leaf de Silicon Valley Leaf

class Father {
	static {
		System.out.println("11111111111");
	}
	{
		System.out.println("22222222222");
	}

	public Father() {
		System.out.println("33333333333");

	}

}

public class Son extends Father {
	static {
		System.out.println("44444444444");
	}
	{
		System.out.println("55555555555");
	}
	public Son() {
		System.out.println("66666666666");
	}


	public static void main(String[] args) { // 由父及子 静态先行
		System.out.println("77777777777");
		System.out.println("************************");
		new Son();
		System.out.println("************************");
		new Son();
		System.out.println("************************");
		new Father();
	}

}

 11111111111
44444444444
77777777777
***********************
22222222222
33333333333
55555555555
66666666666
******************* *****
22222222222
33333333333
55555555555
66666666666
***********************
22222222222
33333333333

Supongo que te gusta

Origin blog.csdn.net/qq_43629083/article/details/108989838
Recomendado
Clasificación