2017-09-19 6 views
0

, 예 인한 가시성 원칙 아래 오류 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의에서

답변

1

,

public **abstract** class ClassLoader 
extends Object 

클래스를 구성하는 바이트 스트림의 위치를 ​​독서에 대해 서로 다른 전략을 사용하는 다른 클래스 로더 구현이 있습니다 .