いくつかのコードブロックの実行順序

2096 ワード

Javaでよく見られるコードは静的コードブロックが速く、コードブロック、ローカルコードブロックを構築します.
1.いくつかのコードが速い特徴:
1.1静的コードブロック
静的コードが速い:クラスに作用します.クラスのロードに伴ってロードされます.クラスのロード後に必要なデータを静的コードブロックに配置することが多い.
1.2構造コードが速い
構築コードが速い:クラスに作用します.彼は構築方法の実行前に実行し,構築方法を実行するたびに構築コードブロックが実行される.
いつ使いますか.たとえば、すべてのコンストラクションメソッドが実行する内容を、コンストラクションコードブロックに上に抽出して入れ、リロードされるコンストラクションメソッドごとにコード量を減らし、簡潔に見えるようにすることができます.
1.3ローカルコードが速い
ローカルコードが速い:ローカルなので、明らかに方法内に作用しています.書式:{文;}.主に実行範囲を限定するために使用されます.
2.実行の順序を例示する
次に、これらのコードブロックの実行順序をコードで具体的に見てみましょう.
package com.ilaoda.codeblock;

/**
 *   
 * @author 
 */
class Father{
	
	//        
	static{
		System.out.println("111---       ");
	}
	
	//        
	{
		System.out.println("222---       ");
	}
	
	//       
	public Father() {
		System.out.println("333---      ");
	}
	
	public void hello() {
		//      
		{
			System.out.println("444---     ");
		}
	}
}

/**
 *   
 * @author iLaoda
 */
class Child extends Father {
	
	//       
	public Child() {
		//super();                ,              
		System.out.println("555---      ");
	}
	
	//        
	static{
		System.out.println("666---       ");
	}
	
	//        
	{
		System.out.println("777---       ");
	}
	
	public static void main(String[] args) {
		Child child = new Child();
		Father father = new Father();
		father.hello();	
	}
}

実行結果:
111---       
666---       
222---       
333---      
777---       
555---      
222---       
333---      
444---     

3.分析説明
子クラスは親クラスを継承するため、クラスローダが親クラスを先にロードするに違いありません.このとき、親クラスの静的コードブロックは親クラスのロードに伴ってロードされ、親クラスのロードが完了すると、クラスローダはサブクラスのロードを開始し、サブクラスの静的コードはすぐにロードされます.子クラスの作成は親クラスに依存するため、子クラスのmain()メソッドで最初にnewの子クラスがある場合、論理が親クラスに呼び出され、親クラスの構築コードブロックが親クラスの構築メソッドの前に実行され、親クラスの構築メソッドが実行される.これらの実行が完了すると、サブクラスに戻り、サブクラスの構築方法ブロック、サブクラスの構築方法を実行する.
次の文がnew Father()の場合、同様に親の構築コードブロック、親の構築方法を実行します.静的コードブロックは実行されないことを覚えておいてください.なぜなら、静的コードブロックは、クラスのロードに伴ってロードされて実行され、今回のみ実行されるからである.最後に、親の参照は、静的コードが速く実行される親のメソッドを呼び出します.
4.その他
もし本文に誤りがあれば、批判の指摘を歓迎し、一緒に交流して分かち合う.