import java.util.*;
import net.rim.vm.*;
public class AddressBook {
static Vector addresses;
static PersistentObject persist;
static {
// Hash of "net.rim.sample.AddressBook".
long KEY = 0xa3b3159378f59a29L;
persist = PersistentStore.getPersistentObject( KEY );
if( persist.getContents() == null ) {
persist.setContents( new Vector() );
persist.commit();
}
addresses = (Vector)persist.getContents();
}
}
void add( Address a ) {
addresses.addElement( a );
persist.commit();
}
}
7 に答える
これstatic {....}
は静的ブロックと呼ばれます。これらは、静的メンバーを初期化するために使用されます。クラスがロード/初期化されると、静的ブロックが実行されます。
あなたの例では、静的ブロックを使用してアドレスとベクトルを初期化しています。
- このクラスはロードされています
静的インスタンス変数が初期化されます
static Vector addresses;
static PersistentObject persist;
次に、静的ブロックが実行されます。
static{....}
によってクラスが最初にロードされるときに、静的ブロック初期化子が実行されますClassLoader
。これは、そのクラスのオブジェクトが初めてインスタンス化されたとき、またはそのクラスの静的メンバーが初めてアクセスされたときに発生します。
静的ブロック初期化子は、インスタンス フィールドのコンストラクターと見なすことができます。コンストラクターはインスタンス変数を適切な値で初期化し、静的ブロック初期化子は適切な値をstatic
変数に割り当てます。
静的ブロックは、関数呼び出しやループなど、単純な割り当てステートメントに配置できないコードを実行して静的フィールドを初期化する場合に役立ちます。
これはStatic Initializerです。クラス ローダーが 1 つしかないと仮定すると、そのコードが 1 回だけ (または N クラス ローダーの場合は N 回) 実行されることが保証されます。
通常、静的初期化子は、Singletonオブジェクトのフィールドを初期化するために使用されます。
静的ブロックは、このクラス (AddressBook) が最初に JVM にロードされたときに実行されます。プログラムがロードされた後、変数を使用できるようになります。
これらの静的変数は、クラスのオブジェクトを作成せずに使用できます
静的ベクター アドレス。static PersistentObject は持続します。
そして、static{---} のようなものを使用するとします。これは、静的初期化子と呼ばれます。オブジェクトを作成する前に初期化されます
最初に静的変数が初期化され、次に静的ブロックが初期化されます