それは<JAVA_HOME>/JRE/libディレクトリ内のjarファイルがない、ブートストラップクラスローダによってロードされたのはなぜ
ブートストラップクラスローダが
<JAVA_HOME>
/JRE/libディレクトリに位置するコアJavaライブラリをロードすると言われています。
そして
拡張クラスローダは、拡張ディレクトリ
<JAVA_HOME>
/JRE/libに/ extに、またはのjava.ext.dirsシステムプロパティで指定された他のディレクトリ)内のコードをロードします。これはsun.misc.Launcher $ ExtClassLoaderクラスによって実装されています。
今私のメインプログラムが
public class TestSt {
public static void main(String[] args) {
System.out.println(String.class.getClassLoader());
System.out.println(Student.class.getClassLoader());
System.out.println(TestSt.class.getClassLoader());
}
}
であれば出力は
これは問題ありません。
今、私はlibに/ JRE /で学生のJarファイルを置く/ EXT出力は
ある場合
どちらも問題ありません。
私はstudent jarファイルを
/jre/libディレクトリに配置すると分かりませんでした。出力は
[email protected] [email protected]に
ヌルとして
を与えているのはなぜ私が考えていた、この場合では学生のクラスブートストラップクラスローダーからロードする必要があります。アプリケーションクラスローダーによってロードされるのはなぜですか。私は何かが足りないと思う。私が間違っている場所を教えてください。
ExtClassLoaderを使用してクラスを 'ext'ディレクトリにロードする理由は何ですか? –
いいえ、私はbootstrapクラスローダーがjre/lib /ディレクトリ内に配置されたクラスをロードしない理由を尋ねています – Roshan