2016-11-10 10 views

答えて

5

クラスのインスタンスごとにインスタンス初期化子ブロックが実行されます。これは、final static変数が複数回(インスタンスごとに1回)初期化されることを意味します。それはfinal変数では許可されていません。

0

変数yは、staticfinalです。

  • キーワードstaticは、変数をクラスのメンバーにするため、静的変数にアクセスするためにクラスのオブジェクトを作成する必要はありません。
  • finalキーワードは唯一の変数は、あなたがstatic final変数を宣言したが、それを初期化していない、一度

初期化することができます。これは初期化のみできます。静的初期化剤ブロックは、インスタンス初期化子としてそれ以前キーワードstaticと同様に定義される

静的初期化子ブロックで宣言

    1. static { 
          // code 
      } 
      

      静的初期化子は、クラスがコンパイルされ実行されたときに一度だけメモリに挿入されます。

      インスタンス初期設定で変数yを初期化しました。このコードブロックは、Staticのオブジェクトが作成されるたびに実行されます。

      コードがコンパイルされない理由は、final変数yは、クラスのオブジェクトが作成されるたびに(同じ値ですが)値8に再割り当てできるためです。

      変数がfinalである必要がある場合は、静的な初期化子を作成します。

      final static int y; 
      static { 
          y = 8; 
      } 
      

      さもないと、変数宣言でfinalstaticまたは両方のキーワードを削除しているとして初期化剤のインスタンスを保ちます。

      int y; 
      { 
          y = 8; 
      } 
      

      static int y; 
      { 
          y = 8; 
      } 
      

      final int y; 
      { 
          y = 8; 
      } 
      
  • 関連する問題