0
 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();
   }
 }

ソース

4

7 に答える 7

1

これstatic {....}は静的ブロックと呼ばれます。これらは、静的メンバーを初期化するために使用されます。クラスがロード/初期化されると、静的ブロックが実行されます。

あなたの例では、静的ブロックを使用してアドレスとベクトルを初期化しています。

于 2012-09-28T06:56:51.253 に答える
1
  1. このクラスはロードされています
  2. 静的インスタンス変数が初期化されます

    static Vector addresses;

    static PersistentObject persist;

  3. 次に、静的ブロックが実行されます。

    static{....}

于 2012-09-28T06:58:13.187 に答える
1

によってクラスが最初にロードされるときに、静的ブロック初期化子が実行されますClassLoader。これは、そのクラスのオブジェクトが初めてインスタンス化されたとき、またはそのクラスの静的メンバーが初めてアクセスされたときに発生します。

静的ブロック初期化子は、インスタンス フィールドのコンストラクターと見なすことができます。コンストラクターはインスタンス変数を適切な値で初期化し、静的ブロック初期化子は適切な値をstatic変数に割り当てます。

静的ブロックは、関数呼び出しやループなど、単純な割り当てステートメントに配置できないコードを実行して静的フィールドを初期化する場合に役立ちます。

于 2012-09-28T06:58:20.137 に答える
0

これはStatic Initializerです。クラス ローダーが 1 つしかないと仮定すると、そのコードが 1 回だけ (または N クラス ローダーの場合は N 回) 実行されることが保証されます。

通常、静的初期化子は、Singletonオブジェクトのフィールドを初期化するために使用されます。

于 2012-09-28T06:56:21.127 に答える
0

静的ブロックは、このクラス (AddressBook) が最初に JVM にロードされたときに実行されます。プログラムがロードされた後、変数を使用できるようになります。

于 2012-09-28T06:58:14.920 に答える
0

これらの静的変数は、クラスのオブジェクトを作成せずに使用できます

静的ベクター アドレス。static PersistentObject は持続します。

そして、static{---} のようなものを使用するとします。これは、静的初期化子と呼ばれます。オブジェクトを作成する前に初期化されます

于 2012-09-28T07:00:10.937 に答える
0

最初に静的変数が初期化され、次に静的ブロックが初期化されます

于 2012-09-28T07:05:49.657 に答える