义齿

1561 ワード

今日Java仮想マシンのclassファイル構造を深く見ていると、
classファイルに表示される可能性のある2つのコンパイラによって生成される方法は、インスタンス初期化方法()とクラスとインタフェース初期化方法()です.
 
この2つの方法にはどんな違いがありますか?
まず、この2つの方法の1つは、仮想マシンがクラスの初期化をロードするときに呼び出される(clinit).もう1つはクラスインスタンス化時に呼び出される(init)
 
まず、クラスの初期化について説明します.
Javaコードでは、クラス変数初期化文または静的初期化文によって正しい初期値が与えられます.クラス変数の初期化文は
変数宣言後の等号と式:
Javaコード
  • class Example {   
  •        static int size = 3 * (int) (Math.random() * 5.0);   
  • }  
  • class Example {
    
           static int size = 3 * (int) (Math.random() * 5.0);
    
    }

     
    静的初期化文はstaticで始まる文ブロックです.
    Javaコード
  • class Example{   
  •      static int size;   
  •      static {   
  •            size = 3 * (int) (Math.random() * 5.0);   
  •      }   
  • }  
  • class Example{
    
         static int size;
    
         static {
    
               size = 3 * (int) (Math.random() * 5.0);
    
         }
    
    }

    すべてのクラス変数初期化文とタイプの静的初期化文はJavaコンパイラによって収集され、特殊な方法に置かれています.この方法はです
     
    という方法を見てみましょう.
    メソッドは、クラスがオブジェクトインスタンス化されたときに呼び出されます.クラスをインスタンス化するには、newオペレータを呼び出す4つの方法があります.Classまたはjavaを呼び出します.lang.reflect.ConstructorオブジェクトのnewInstance()メソッド;既存のオブジェクトのclone()メソッドを呼び出します.Javaを通ります.io.ObjectInputStreamクラスのgetObject()メソッドを逆シーケンス化します.
     
    Javaコンパイラは、クラスごとに少なくとも1つのインスタンス初期化メソッドを生成します.Classファイルでは「」と呼ばれています
     
    わかりました.一つは静的クラス変数を初期化するためのもので、もう一つはインスタンス変数を初期化するためのものです.