Javaクラスのロード接続と初期化インスタンス分析
1967 ワード
この例では、Javaクラスのロード接続と初期化について説明します.皆さんの参考にしてください.具体的には以下の通りです.
ほんの少し
1クラスのロード
プログラムがアクティブにクラスを使用する場合、クラスがメモリにロードされていない場合、システムはロード、接続、初期化の3つのステップでクラスを初期化します.予期せぬことがなければ、JVMはこの3つのステップを連続的に完了するので、これらの3つのステップを総称してクラスロードまたはクラス初期化と呼ぶこともあります.
クラスロードとは、クラスのclassファイルをメモリに読み込み、java.lang.Classオブジェクトを作成することです.つまり、プログラムがクラスを使用すると、java.lang.Classオブジェクトが作成されます.
2クラスデータのソース
異なるクラス・ローダを使用すると、クラスのバイナリ・データを異なるソースからロードできます.通常、次のようなソースがあります.
ローカルファイルシステムからclassファイルをロードします.これはほとんどの分類ロード方式です.
JARパッケージからclassファイルをロードするのもよくありますが、ODBCプログラミングで使用されるデータベースドライバクラスはJARファイルに配置され、JVMはJARファイルから直接このclassファイルをロードすることができます.
ネットワークを介してclassファイルをロードします.
Javaソースファイルを動的にコンパイルし、ロードします.
3クラスの接続
クラスがロードされると、システムは対応するClassオブジェクトを生成し、接続フェーズに入り、接続フェーズはクラスのバイナリデータをJREにマージする責任を負います.クラス接続は、次の3つの段階に分けられます.検証:検証フェーズは、ロードされたクラスに正しい内部構造があるかどうかを検証し、他のクラスと協調している. 準備:クラス準備フェーズでは、クラスの静的属性にメモリを割り当て、デフォルトの初期値を設定します. 解析:クラスのバイナリデータのシンボル参照を直接参照に置き換えます.
4クラスの初期化
クラスの初期化フェーズでは、仮想マシンがクラスを初期化し、主に静的プロパティを初期化します.Javaクラスで静的プロパティの初期値を指定するには、次の2つの方法があります.
静的プロパティを宣言するときに初期値を指定します.
静的初期化ブロックを使用して、静的プロパティの初期値を指定します.
5 JVMクラスを初期化するには
5.1このクラスがまだロードされていない場合、プログラムは先にクラスをロードして接続します.
5.2クラスの直接親がまだ初期化されていない場合は、その直接親を初期化します.
5.3クラスに初期化文がある場合、システムはこれらの初期化文を順次実行する.
二実戦
1コード
2運転
---------- 9
Javaに関する詳細に興味のある読者は、「Javaオブジェクト向けプログラム設計入門と進級チュートリアル」、「Javaデータ構造とアルゴリズムチュートリアル」、「Java操作DOMノードテクニックまとめ」、「Javaファイルとディレクトリ操作テクニックまとめ」、「Javaキャッシュ操作テクニックまとめ」のトピックを参照してください.
本文で述べたjavaプログラム設計に役立つことを願っています.
ほんの少し
1クラスのロード
プログラムがアクティブにクラスを使用する場合、クラスがメモリにロードされていない場合、システムはロード、接続、初期化の3つのステップでクラスを初期化します.予期せぬことがなければ、JVMはこの3つのステップを連続的に完了するので、これらの3つのステップを総称してクラスロードまたはクラス初期化と呼ぶこともあります.
クラスロードとは、クラスのclassファイルをメモリに読み込み、java.lang.Classオブジェクトを作成することです.つまり、プログラムがクラスを使用すると、java.lang.Classオブジェクトが作成されます.
2クラスデータのソース
異なるクラス・ローダを使用すると、クラスのバイナリ・データを異なるソースからロードできます.通常、次のようなソースがあります.
ローカルファイルシステムからclassファイルをロードします.これはほとんどの分類ロード方式です.
JARパッケージからclassファイルをロードするのもよくありますが、ODBCプログラミングで使用されるデータベースドライバクラスはJARファイルに配置され、JVMはJARファイルから直接このclassファイルをロードすることができます.
ネットワークを介してclassファイルをロードします.
Javaソースファイルを動的にコンパイルし、ロードします.
3クラスの接続
クラスがロードされると、システムは対応するClassオブジェクトを生成し、接続フェーズに入り、接続フェーズはクラスのバイナリデータをJREにマージする責任を負います.クラス接続は、次の3つの段階に分けられます.
4クラスの初期化
クラスの初期化フェーズでは、仮想マシンがクラスを初期化し、主に静的プロパティを初期化します.Javaクラスで静的プロパティの初期値を指定するには、次の2つの方法があります.
静的プロパティを宣言するときに初期値を指定します.
静的初期化ブロックを使用して、静的プロパティの初期値を指定します.
5 JVMクラスを初期化するには
5.1このクラスがまだロードされていない場合、プログラムは先にクラスをロードして接続します.
5.2クラスの直接親がまだ初期化されていない場合は、その直接親を初期化します.
5.3クラスに初期化文がある場合、システムはこれらの初期化文を順次実行する.
二実戦
1コード
public class Test
{
static
{
// b
b = 6;
System.out.println("----------");
}
// a
static int a = 5;
static int b = 9; // ①
static int c;
public static void main(String[] args)
{
System.out.println(Test.b);
}
}
2運転
---------- 9
Javaに関する詳細に興味のある読者は、「Javaオブジェクト向けプログラム設計入門と進級チュートリアル」、「Javaデータ構造とアルゴリズムチュートリアル」、「Java操作DOMノードテクニックまとめ」、「Javaファイルとディレクトリ操作テクニックまとめ」、「Javaキャッシュ操作テクニックまとめ」のトピックを参照してください.
本文で述べたjavaプログラム設計に役立つことを願っています.