検索
ホームページJava&#&チュートリアルJava の静的ブロックとインスタンス ブロックについて。

初めてクラスを使用するときは、クラスローダーによってクラスをロードする必要があります。ロードプロセスには次の 2 つの点が含まれます:

(1) クラスをロードするとき、その親クラスがロードされていない場合、その場合、その親クラスはまだロードされていません。親クラスを最初にロードする必要があります。

(2) クラスがメモリにロードされた後、その静的データ フィールドと静的ブロックがコード内に出現する順序で実行されます。

2. クラスのコンストラクターを呼び出すとき、呼び出しプロセスには次の 3 つの点が含まれます:

(1) 親クラスのコンストラクターを呼び出します。コードインスタンスブロック内に出現する順序

(3) コンストラクター本体を実行します。

理論は実践を通じて証明する必要があります。それを証明するための簡単な例を次に示します。

/**
 * 
 * @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 的静态块。");
	}
}

上記の例では、クラスの各部分に対応するテキストが出力されるため、出力から実行順序がわかります。

対応する出力は次のとおりです:

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


この出力から、プログラムの実行順序は次のとおりであることがわかります:

1. まず、Initialization クラスを使用するために、Initialization クラスがロードされます。静的ブロックが実行されるため、出力は 1; プログラムは Initialization のコンストラクターを呼び出し、Initialization クラスのインスタンス ブロックが実行されるため、出力は 2 になります。の初期化、つまり new B() が実行されます。このとき、クラス B を使用する必要があるため、クラス B をロードする必要があります。が最初にロードされるため、この時点で A のロード処理が実行されます。つまり、A の静的ブロックが実行され、出力 3 がロードされます。このとき、B がロードされます。時間、B のロード処理が実行される、つまり B の静的ブロックが実行されるため、 4 が出力されます

6. ロードが完了したら、コードに従ってコンストラクターである new B() を実行します。 Bの、このとき、親クラスAのコンストラクタを先に呼び出す必要があるので、Aのインスタンスブロックとコンストラクタ本体が順番に実行され、5と6が出力されます

7。 B のコンストラクターを「実際に」実行する時間が来たので (以前 new B() の実行について話しましたが、他のものを呼び出しているため)、B のインスタンス ブロックとコンストラクター本体を順番に実行し、 7 と 8 を出力します。

上記はJavaの静的ブロックとインスタンスブロックについてです。関連コンテンツの詳細については、PHP 中国語 Web サイト (www.php.cn) に注目してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)