Home  >  Article  >  Java  >  About static blocks and instance blocks in Java.

About static blocks and instance blocks in Java.

黄舟
黄舟Original
2017-02-07 11:03:211511browse

When a class is used for the first time, it needs to be loaded by the class loader, and the loading process involves the following two points:

(1) When loading a class, if its parent class is still If it is not loaded, then its parent class must be loaded first;

(2) After the class is loaded into memory, its static data fields and static blocks are executed in the order of appearance in the code.

2. When calling the constructor of a class, the calling process involves the following three points:

(1) Calling the constructor of the parent class;

(2) Initialize instance data fields and execute instance blocks in the order they appear in the code;

(3) Execute its constructor body.

The theory still has to be proven through practice. Here is a simple example to prove it.

/**
 * 
 * @author Sel
 * 
 * 2014.3.29
 */public class InitializationDemo {	public static void main(String[] args) {		
		new InitializationDemo();
	}	
	public InitializationDemo() {		
		new B();
	}
	
	{
		System.out.println("2. Initialization 的实例块。");
	}	
	static {
		System.out.println("1. Initialization 的静态块。");
	}

}class A {
	
	A() {
		System.out.println("6. A 的构造函数体。");
	}
	
	{
		System.out.println("5. A 的实例块。");
	}	
	static {
		System.out.println("3. A 的静态块。");
	}
}class B extends A {
	
	B() {
		System.out.println("8. B 的构造函数体。");
	}
	
	{
		System.out.println("7. B 的实例块。");
	}	
	static {
		System.out.println("4. B 的静态块。");
	}
}

The above example outputs corresponding text in each part of the class, so that the execution order can be seen from the output.

The corresponding output is as follows:

1. Initialization 的静态块。
2. Initialization 的实例块。
3. A 的静态块。
4. B 的静态块。
5. A 的实例块。
6. A 的构造函数体。
7. B 的实例块。
8. B 的构造函数体。


It can be seen from the output that the sequence of program execution is as follows:

1. First, use Initialization class, then the Initialization class is loaded, so its static block is executed, so 1 is output;

2. The program calls the constructor of Initialization, so the instance block of the Initialization class is executed, so 2 is output;

3. Then, execute the constructor body of Initialization, that is, new B(). At this time, because class B is to be used, it is loaded;

4. Because the parent class of class B is A , then before loading B, A must be loaded first, so the loading process of A is executed at this time, that is, the static block of A is executed, so 3 is output;

5. After A is loaded, it is time to go to B is loaded. At this time, the loading process of B is executed, that is, the static block of B is executed, so 4 is output;

6. After the loading is completed, according to the code, new B(), which is the constructor of B, is executed. , so at this time, the constructor of the parent class A must be called first, so the instance block and constructor body of A are executed in sequence, and 5 and 6 are output;

7. Finally, the "real" execution is B's constructor (because it has been said to execute new B() before, but it has been calling others), so the instance block and constructor body of B are executed in sequence, and 7 and 8 are output.

The above is about static blocks and instance blocks in Java. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn