javaの特殊static:メモ
Javaの特殊static:メモ
javaにはstaticメンバやstaticメソッドなどの他に、特殊なstatic 定義があります。
- staticインポート
- static構築(staticブロック)
// StaticTest.java import java.util.*; import static java.lang.Math.*; // staticインポート public class StaticTest{ final static HashMap<String,Double> dict; public static void main(String[]args){ try{ for(String s:args){ System.out.println(s+"\t= "+dict.get(s)); } } catch(Exception e){ e.printStackTrace(System.err); System.exit(1); } System.exit(0); } static { // static構築(staticブロック) dict = new HashMap(); dict.put("PI",PI); // java.lang.Math.PI dict.put("E",E); // java.lang.Math.E } }
staticインポートを行うと、各クラスのstaticメンバ、メソッドにクラス名を省略して
アクセスできます。
上の例ではMath.PIと書かずにPIだけでアクセスしています。
static構築(staticブロック)はstaticメンバに対する他からのアクセスより前に動作するので
staticメンバに対する複雑な構築手順を記述することができます。
final staticメンバに値を与えることも可能です。
上の例でmain関数でfinal staticメンバdictにアクセスしますが、その前にdictには
static構築により値が設定されています。
サンプルのダウンロード
コピペで充分だとも思いますが、念のため StaticTst.zip にプログラムとantのbuildファイル、ant起動バッチファイルを 用意しました。
A00_clean.bat : 二次ファイルを消去する(単純なant呼び出しです)
A01_build.bat : ビルドする(単純なant呼び出しです)
A05_run.bat : 起動する(単純なant呼び出しです)
A10_test.bat : ビルドし起動する(単純なant呼び出しです)
build.xml : ANTのビルドファイル
StaticTest.java : プログラムファイル
A10_test.batは、ビルドし、引数"E PI x"でStaticTestプログラムを起動します。次の結果が得られます。
E = 2.718281828459045 PI = 3.141592653589793 x = null
汚い文法
何とも汚い文法ではありますが、キーワードを追加することなく、 無理やり追加したものですので、、、、、
staticブロックは単に汚いだけでなく、相互参照がある場合はもとより
片側参照の場合でも初期化エラーが発生する場合があります。
そもそもJavaはとんでもなく貧弱なコンパイラなのでしかた
ありません。
| 固定リンク