, 예 인한 가시성 원칙 아래 오류 test.ClassLoaderTest
를로드하기 위해 호출됩니다명시로드 - 코드 아래 사용 <code>test.ClassLoaderTest</code>의 명시 적 로딩을위한 첫 번째 경우에서 java.lang.ClassLoader의
public ClassLoaderTest{
public static void main(String[] args){
.....
Class.forName("test.ClassLoaderTest", true,
ClassLoaderTest.class.getClassLoader().getParent());
....
}
findClass()
방법 Launcher$ExtClassLoader
의,
test.ClassLoaderTest1
의 명시적인로드에 대한 두 번째 경우에서,
java.lang.ClassNotFoundException: test.ClassLoaderTest
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at sun.misc.Launcher$ExtClassLoader.findClass(Launcher.java:229)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at test.ClassLoaderTest.main(ClassLoaderTest.java:29)
public ClassLoaderTest{
public static void main(String[] args){
.....
Class.forName("test.ClassLoaderTest1");
....
}
loadClass()
방법 Launcher$AppClassLoader
의 인스턴스는 궁극적으로 두 경우 모두 test.ClassLoaderTest1
클래스, test.ClassLoaderTest1
아래 오류가 발생할 잘못된 클래스 파일입니다
,
java.lang.ClassNotFoundException: test.ClassLoaderTest1
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at test.ClassLoaderTest1.main(ClassLoaderTest.java:16)
를로드하는 데 사용됩니다 , 클래스 로딩 작업은 java.net.URLClassLoader.findClass()
Class.forName()
은 이미 클래스를로드 한 클래스 로더를 알기 위해 getClassLoader()
을 내부적으로 호출합니다. Class
다시 클래스 로더 인스턴스를 호출 할 ClassLoader cl = getClassLoader0();
를 호출하여 (유형 실행기 $ AppClassLoader의) 클래스 로더 인스턴스를 가져옵니다 두 번째 경우
java.lang.ClassLoader
은 주로 하위 클래스 사용자 정의 클래스 로더에 사용됩니까? CLASSPATH뿐만 네트워크 소스 등에서 사용할 수 없습니다로드하는 클래스 ... Javadoc의에서