私は先日あるコードを見ていました、そして私は遭遇しました:
static {
...
}
C++から来て、私はなぜそれがそこにあったのかわかりませんでした。コードがうまくコンパイルされたので、それはエラーではありません。この「静的な」コードブロックとは何ですか?
静的初期化子 です。クラスがロードされる(または正確には初期化されるが、通常は違いに気付かない)ときに実行されます。
「クラスコンストラクター」と考えることができます。
instance initializers もあり、static
キーワードがないことを除いて同じように見えます。これらは実行されますに加えてオブジェクトの新しいインスタンスが作成されたときのコンストラクターのコード。
静的初期化子です。クラスがロードされたときに実行され、静的変数の初期化を行うのに適した場所です。
http://Java.Sun.com/docs/books/tutorial/Java/javaOO/initial.html より
クラスは、静的初期化ブロックをいくつでも持つことができ、それらはクラス本体のどこにでも置くことができます。ランタイムシステムは、静的初期化ブロックがソースコードに現れる順序で呼び出されることを保証します。
静的なルックアップマップを持つクラスがあるならば、それはこのように見えるでしょう
class MyClass {
static Map<Double, String> labels;
static {
labels = new HashMap<Double, String>();
labels.put(5.5, "five and a half");
labels.put(7.1, "seven point 1");
}
//...
}
上記の静的フィールドはlabels = ...
を使って初期化できなかったので便利です。どういうわけかput-methodを呼び出す必要があります。
クラスローダによってクラスがロードされると実行されるコードブロックです。クラスの静的メンバの初期化を行うことを目的としています。
もっと見慣れない静的でない初期化子を書くことも可能です。
public class Foo {
{
// This code will be executed before every constructor
// but after the call to super()
}
Foo() {
}
}
静的ブロックは、プログラムが主な機能なしでも実行できることを示すために使用できます。
//static block
//static block is used to initlize static data member of the clas at the time of clas loading
//static block is exeuted before the main
class B
{
static
{
System.out.println("Welcome to Java");
System.exit(0);
}
}
静的ブロックは、プログラムのライフサイクルの中で1回実行されます。静的ブロックのもう1つの特性は、メインメソッドの前に実行されることです。
静的ブロックはコードを初期化するために使用され、JVMがクラスをロードするときに実行されます。詳細な説明を与える下記のリンクを参照してください。 http://www.jusfortechies.com/Java/core-Java/static-blocks.php