« ◆青物横丁品川灯台複製の方位表示:NEOS | トップページ | canvasに文字列を書く:JavaScriptメモ »

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はとんでもなく貧弱なコンパイラなのでしかた ありません。

|

« ◆青物横丁品川灯台複製の方位表示:NEOS | トップページ | canvasに文字列を書く:JavaScriptメモ »

トラックバック


この記事へのトラックバック一覧です: javaの特殊static:メモ:

« ◆青物横丁品川灯台複製の方位表示:NEOS | トップページ | canvasに文字列を書く:JavaScriptメモ »