JLS Chapter 12. Executionを読んだので、解決について書かれています
解決とは、言及されている他のクラスおよびインターフェースをロードし、参照が正しいことを確認することによって、Test から他のクラスおよびインターフェースへのシンボリック参照をチェックするプロセスです。
解決ステップは、初期リンク時のオプションです。実装は、非常に早い段階でリンクされているクラスまたはインターフェースからのシンボリック参照を解決する場合があり、さらに再帰的に参照されるクラスおよびインターフェースからのすべてのシンボリック参照を解決する場合もあります。...
実装は、代わりに、シンボリック参照がアクティブに使用されている場合にのみ、シンボリック参照を解決することを選択できます。すべてのシンボリック参照に対してこの戦略を一貫して使用すると、解決の「最も怠惰な」形式になります。この場合、Test が別のクラスへのシンボリック参照を複数持っていた場合、これらの参照がプログラムの実行中に使用されなかった場合、参照は一度に 1 つずつ解決されるか、まったく解決されない可能性があります。
たとえば、実装では、クラスまたはインターフェイス内の各シンボリック参照を、それが使用されている場合にのみ個別に解決するか (遅延解決または遅延解決)、またはクラスの検証中にすべてを一度に解決するか (静的解決) を選択できます。これは、一部の実装では、クラスまたはインターフェースが初期化された後、解決プロセスが続行される可能性があることを意味します。
私の質問は、遅延初期化の使用を選択/強制することを選択できるかどうかです。たぶん、カスタム クラス ローダーを作成する必要がありますか? または、起動時のクラスローダーの ClassNotFoundException が無視される可能性がありますか?
main
実際に発生してはならないオブジェクトの条件付き作成があり、対応するクラスがjarにありません。ただし、実行を開始するNoClassDefFound
前でもスローされます。main