Javaのコンパイル時の定数およびランタイム定数
コンパイル時定数プログラムを指すコンパイル時定数の具体的な値を決定することができるであろう。
非コンパイル時定数定数の値を決定することも実行時定数として知られている実行時のプログラム、です。
Javaでは、を参照コンパイル時定数基本的なタイプ又はキーワード文字列型と直接割り当て(非複合操作)変数(静的修飾を有するか否か)の最終的な変更は、最適化コンパイラは、言葉で具体化セクションコードファイル;で実行定数で完成通訳解釈ランタイム。
ランタイム定数が理解しやすいです、次はリスクの定数を導入し、使用時のコンパイルするバイトコードファイルの単純な組み合わせになります。
パブリック クラスConstantTest { パブリック 最終 int型 A = 1; // コンパイル時定数 パブリック 最終 int型 B = 1 + 2; // 単純な加算、減算及び他の演算のためにコンパイル時定数サポート パブリック 最終 int型の C = B + 3; // コンパイル時定数量 パブリック 最終 静的 int型 D = 10; // コンパイル時定数 パブリック 最終列STR1 =「ABC」; // コンパイル時定数 パブリック 最終列STR2 =「DEF」+「GHI」; // コンパイル時定数のサポートストリング接続されている 公共の 最終的な文字列STR3 + = str2の「JKL」。 // コンパイル時定数 公共 決勝 静的の文字列STR4 =「静的STR」; // コンパイル時の定数の 公共 決勝 ダブル E = Math.random(); // 実行時に一定の 公共 決勝 ConstantTestテスト= 新しい新 ConstantTest(); // ファイル名を指定して実行時定数 }
ここでは、バイトコードにコンパイル対応する情報は以下のとおりです。
注意!!!!!!
参照クラスのすべての場合に修飾されたクラスA静的コンパイル時定数静的最終変性静的コンパイル時定数は、コンパイル時にすべてまたは文字列対応する値に置き換えられます、クラスAとBとクラスB、のみ再コンパイルクラスAに、クラスBの前にまだ一定の参照である場合は、再コンパイルする必要があります。
以下は、ケースです。
クラスConstantTest:
パブリック クラスConstantTest { パブリック 最終 int型 A = 1 。 パブリック 最終 int型、B = 1 + 2 。 パブリック 最終 int型の C = B + 3 。 公共の 最終 静的の int型 D = 10 ; 公共の 最終文字列STR1 = "ABC" ; 公共の 最終文字列STR2 = "DEF" + "GHI" 。 公共の 最終 = STR2 + "JKL"の文字列STR3 。 公共の 最終 静的の文字列STR4 =「静的STR」; 公共の 最終 ダブル E = Math.random(); パブリック 最終 ConstantTestテスト= 新しいConstantTest()。 }
テストカテゴリはConstantTest静的コンパイル時定数を引用しました。
パブリック クラスのテスト{ 公共 のint M = ConstantTest.d。 パブリック 静的の int型のn = ConstantTest.d。 公共の 最終 int型グラム= ConstantTest.d。 パブリック 静的 最終 int型 J = ConstantTest.d。 パブリック 静的 ボイドメイン(文字列[]引数){ int型 K = ConstantTest.d。 System.out.println( "M =" + 新しいテスト()M。); System.out.println( "N =" + N)。 System.out.println( "G =" + 新しいテスト()G。); System.out.println( "J =" + J)。 System.out.println( "K =" + K)。 } }
まずコンパイルして実行Testクラスの:
再コンパイルConstantTest後の20の変更ConstantTest静的定数値、業績:
テストを再コンパイルした後、結果:
要約すると:
- コンパイル時定数は、使用する基本型または文字列型と直接割り当て(非複合操作)変数(静的修飾を有するか否か)のキーワードの最終修正を指します。
- ランタイム定数は、の値を決定するために、実行時に定数です。
- すべての参照他のクラスの静的コンパイル時定数は(一般的に静的な最終で修飾された、静的定数と呼ばれる)は、バイトコードでクラス全体の定数に対応する値に置き換えられ、それはクラスの静的定数のトリガーの初期化を参照していません。