クラスローダー実際の点分析と分析困難
ロードされている負荷クラスファイルの様々なタイプの場所を探す1:
public class MyTest18 {
public static void main(String[] args) {
System.out.println(System.getProperty("sun.boot.class.path"));//根类加载器
System.out.println(System.getProperty("java.ext.dirs")); //扩展类加载器
System.out.println(System.getProperty("java.class.path")); //系统类加载器
}+
}
結果:
C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ resources.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ rt.jarの; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ sunrsasign.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\のjsse.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ jce.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ charsets.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ jfr.jar。C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \クラス
C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに; C:\ WINDOWS \日\のJava \ libに\ extに
C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ charsets.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ deploy.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\アクセス・ブリッジ64.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\ cldrdata.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\ dnsns.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\ jaccess.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\ jfxrt.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\ localedata.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\ nashorn.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\サーブレット-api.jarを; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\ sunec.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\ sunjce_provider.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\ sunmscapi.jar ; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\ sunpkcs11.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\ zipfs.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ javaws.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ jce.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ jfr.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ jfxswt.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\のjsse.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\管理-agent.jar; C :\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ plugin.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ resources.jar; C:\プログラムファイル\のJava \ jdk1 .8.0_131 \ JRE \ libに\ rt.jarの; E:\プログラム\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\管理-agent.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ plugin.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ resources.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ rt.jarの; E:\プログラム\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\管理-agent.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ plugin.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ resources.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ rt.jarの; E:\プログラムファイル(x86の)\ IdeaProject \ Javalearn \ 正規表現ああ\ OUT \生産の\ IdeaProject ; E:\プログラムファイル\ジェットブレーンズ\のIntelliJ IDEA 2017年3月4日\ libに\ idea_rt.jar
2.ルートクラスローダがロードファイル
-
上記から知られている、ルートクラス・ファイルがロードされたロードの場所は次のとおりです。C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \クラス。
-
だから、ここJREの以下のフォルダを作成します。クラス/ JVM /×××の.classファイルを、最終的な結果を実行します。MyParent.classファイルは、ルートクラスローダによってロードされます。
-
public class MyTest18_1 { public static void main(String[] args) throws Exception { MyTest16 loader1 = new MyTest16("laoder1"); loader1.setPath("C:\\Users\\admin\\Desktop\\"); Class<?> clazz = loader1.loadClass("Jvm.MyParent"); System.out.println("class : " + clazz.hashCode()); System.out.println("class loader : "+clazz.getClassLoader()); } } 运行结果: class : 1761291320 class loader : null <---根类加载器
-
3.拡張クラスローダがロードファイル
-
通常動作:結果から明らかに実行します。aesKeyGenerator拡張クラスローダを使用して。
public class MyTest19 { public static void main(String[] args) { AESKeyGenerator aesKeyGenerator = new AESKeyGenerator(); System.out.println(aesKeyGenerator.getClass().getClassLoader()); System.out.println(MyTest19.class.getClassLoader()); } } 运行结果: sun.misc.Launcher$ExtClassLoader@610455d6 sun.misc.Launcher$AppClassLoader@18b4aac2
-
現在のディレクトリにクラスファイルをロードするために、拡張クラスローダーを設定する場合、上記の手順の操作は、NoClassDefFoundErrorが表示されます