使用時にクラスをロードする必要がありますか?

クラス・ローダーは、クラスが「アクティブに初めて使用される」のを待ってからそれをロードする必要はありません。JVM仕様では、クラス・ローダーは、クラスが使用されることが予想されるときに、事前ロード・プロセス中に検出された場合に、クラスを事前ロードできます。 .classファイルが見つからないかエラーがある場合、クラスローダーは、プログラムが初めてクラスをアクティブに使用するときにのみエラーを報告する必要があります(LinkageErrorエラー)クラスがプログラムによってアクティブに使用されていない場合、クラスローダーはエラーを報告しません

 

クラスに親クラスがあるか、関連するインターフェースが実装されている場合、対応する親クラスが最初に読み込まれるか、最初に接続されることは誰でも知っています。ただし、この状況に加えて、クラスもロードされる状況がいくつかあります。

仮想マシンのパラメーターを追加します:-verbose:class

最初のケース:メソッドを呼び出す、呼び出しメソッドはクラスを使用します

パブリック クラスReloadTest {

    public  static  void main(String [] args){
        System.out.println( "---------- Start to execute the main method ----------" );
         // テストメソッドを呼び出してPrintTestクラス
        testの使用を開始します();
    }
    
    public  static  void test(){
        System.out.println(。PrintTest クラス.getClass());
    }

}

 

しかし、この場合、このクラスはロードされません

mainメソッドは何もしない、つまりPrintTestクラスを使用せず、もちろんこのクラスをロードしません

パブリック クラスReloadTest {
     static {
        System.out.println( "------------ Start to execute static code block ----------" );
    }

    public  static  void main(String [] args){
    }
    
    public  static  void test(){
        System.out.println(PrintTest。クラス);
    }

}

 

2番目のケース:メソッドの戻り値の型としてのPrintTestクラス

パブリック クラスReloadTest {
     static {
        System.out.println( "------------ Start to execute static code block ----------" );
    }
    
    public  static  void main(String [] args){
    }
    
    public PrintTest test(){
         nullを返す ;
    }
}

コンソール出力を見てください:

 

おすすめ

転載: www.cnblogs.com/caoxb/p/12735542.html