JavaTM Platform
Standard Ed. 6

java.lang
클래스 ClassLoader

java.lang.Object 
  상위를 확장 java.lang.ClassLoader
직계의 기존의 서브 클래스:
SecureClassLoader


public abstract class ClassLoader
extends Object

클래스 로더는, 클래스의 로드를 담당하는 객체입니다. ClassLoader 클래스는 abstract 클래스입니다. 클래스의바이너리명을 지정하면(자), 클래스 로더는 클래스의 정의를 구성하는 데이터를 찾아내는지 생성합니다. 일반적인 방법으로서는, 이름을 파일명으로 변환해, 파일 시스템으로부터 그 이름의 「클래스 파일」을 읽어들입니다.

Class 객체는, 그 객체를 정의한 ClassLoader 에의 reference 를 포함하고 있습니다.

배열 클래스의 Class 객체는, 클래스 로더에 따라서는 작성되지 않고, Java Runtime 의 요구에 응해 자동적으로 작성됩니다. 배열 클래스의 클래스 로더는,Class.getClassLoader() 에 의해 돌려주어져 그 요소의 형태의 클래스 로더와 같게 됩니다. 요소의 형태가 원시형의 경우에는, 배열 클래스에 클래스 로더는 없습니다.

어플리케이션은, Java 가상 머신이 동적으로 클래스를 로드하도록(듯이) 확장하기 위해(때문에),ClassLoader 의 서브 클래스를 구현합니다.

클래스 로더는 일반적으로, 시큐리티 매니저가 시큐리티 도메인을 나타내기 위해서(때문에) 사용됩니다.

ClassLoader 클래스는, 위양 모델을 사용해 클래스와 자원을 찾습니다. ClassLoader 의 각 인스턴스는, 관련하는 친클래스 로더를 가집니다. 클래스 또는 자원을 찾아내기 위해서(때문에) 불려 가면(자),ClassLoader 인스턴스는 그 자체로 클래스 또는 자원의 검색을 시도하기 전에, 그 검색을 친클래스에 위양 합니다. 「bootstrap 클래스 로더」라고 불리는 가상 머신의 편입 클래스 로더는 그 자체에서는 부모를 가지지 않고,ClassLoader 인스턴스의 부모로서 동작합니다.

일반적으로, Java 가상 머신은, 플랫폼에 의존하지 않는 방법으로 로컬 파일 시스템으로부터 클래스를 로드합니다. 예를 들어, UNIX 시스템에서는,CLASSPATH 환경 변수에 의해 정의된 디렉토리에서 클래스를 로드합니다.

다만, 파일로부터 작성할 수 없는 클래스도 있습니다. 이러한 클래스는, 네트워크등의 다른 소스로부터 작성하거나 어플리케이션이 구축하거나 합니다. defineClass 메소드는, 바이트의 배열을 Class 클래스의 인스턴스로 변환합니다. 새롭게 정의한 클래스의 인스턴스는,Class.newInstance 를 사용해 생성할 수 있습니다.

클래스 로더로 작성한 객체의 메소드와 생성자 은, 다른 클래스를 참조할 수 있습니다. 참조하는 클래스를 판정하기 위해서, Java 가상 머신은, 클래스를 최초로 작성한 클래스 로더의 loadClass 메소드를 호출합니다.

예를 들어, 어플리케이션은 네트워크 클래스 로더를 작성해, 서버로부터 클래스 파일을 다운로드할 수 있습니다. 코드는 다음과 같이 됩니다.

   ClassLoader loader = new NetworkClassLoader(host,  port);
   Object main = loader.loadClass("Main", true). newInstance();
          .  .  .
 

네트워크 클래스 로더의 서브 클래스는, 네트워크로부터 클래스를 로드하기 위해서(때문에) findClass 메소드와 loadClassData 메소드를 정의하지 않으면 안됩니다. 클래스를 작성하는 바이트를 한 번 다운로드하면(자),defineClass 메소드를 사용해 클래스 인스턴스를 생성할 필요가 있습니다. 구현의 예를 다음에 나타냅니다.

     class NetworkClassLoader extends ClassLoader {
         String host;
         int port;

         public Class findClass(String name) {
             byte[] b = loadClassData(name);
             return defineClass(name, b, 0, b.length);
         }

         private byte[] loadClassData(String name) {
             // load the class data from the connection
              .  .  .
         }
     }
 

바이너리명

ClassLoader 의 메소드에 String 파라미터로서 제공되는 클래스명은,「Java 언어 스펙」으로 정의된 바이너리명일 필요가 있습니다.

다음에, 유효한 클래스명의 예를 나타냅니다.

   "java.lang.String"
   "javax.swing.JSpinner$DefaultEditor"
   "java.security.KeyStore$Builder$FileBuilder$1"
   "java.net.URLClassLoader$3$1"
 

도입된 버젼:
1.0
관련 항목:
resolveClass(Class)

생성자 의 개요
protected ClassLoader ()
          getSystemClassLoader() 메소드에 의해 반환된 ClassLoader 를 친클래스 로더로서 사용해, 새로운 클래스 로더를 작성합니다.
protected ClassLoader (ClassLoader  parent)
          지정된 친클래스 로더를 사용해, 위양을 위해서(때문에) 새로운 클래스 로더를 작성합니다.
 
메소드의 개요
 void clearAssertionStatus ()
          이 클래스 로더의 디폴트 선언 상태를 false 로 설정해, 클래스 로더에 관련지을 수 있었던 디폴트 패키지 및 클래스 선언 상태 설정을 모두 파기합니다.
protected  Class <? > defineClass (byte[] b, int off, int len)
          추천 되고 있지 않습니다.  defineClass(String, byte[], int, int) 로 옮겨졌습니다.
protected  Class <? > defineClass (String  name, byte[] b, int off, int len)
          바이트의 배열을 Class 클래스의 인스턴스로 변환합니다.
protected  Class <? > defineClass (String  name, byte[] b, int off, int len, ProtectionDomain  protectionDomain)
          옵션의 ProtectionDomain 를 사용해, 바이트의 배열을 Class 클래스의 인스턴스로 변환합니다.
protected  Class <? > defineClass (String  name, ByteBuffer  b, ProtectionDomain  protectionDomain)
          옵션의 ProtectionDomain 를 사용해,ByteBufferClass 클래스의 인스턴스로 변환합니다.
protected  Package definePackage (String  name, String  specTitle, String  specVersion, String  specVendor, String  implTitle, String  implVersion, String  implVendor, URL  sealBase)
          이 ClassLoader 로 이름을 사용해 패키지를 정의합니다.
protected  Class <? > findClass (String  name)
          지정된바이너리명을 가지는 클래스를 찾습니다.
protected  String findLibrary (String  libname)
          네이티브 라이브러리의 절대 경로명을 돌아갑니다.
protected  Class <? > findLoadedClass (String  name)
          이 로더가 이바이너리명을 가지는 클래스의 기동 로더로서 Java 가상 머신에 의해 기록되고 있었을 경우는, 지정된바이너리명을 가지는 클래스를 돌려줍니다.
protected  URL findResource (String  name)
          지정된 이름을 가지는 자원을 검색합니다.
protected  Enumeration <URL > findResources (String  name)
          지정된 이름을 가지는 모든 자원을 나타내는 URL 객체의 열거를 돌려줍니다.
protected  Class <? > findSystemClass (String  name)
          지정된바이너리명을 가지는 클래스를 찾아, 필요에 따라서 로드합니다.
protected  Package getPackage (String  name)
          이 클래스 로더인가 게다가 위객체의 어떤 것 등에 의해서 정의된 Package 를 돌려줍니다.
protected  Package [] getPackages ()
          이 클래스 로더와 게다가 위객체에 의해 정의된 모든 Packages 를 돌려줍니다.
 ClassLoader getParent ()
          위양을 위한 친클래스 로더를 돌려줍니다.
 URL getResource (String  name)
          지정된 이름을 가지는 자원을 검색합니다.
 InputStream getResourceAsStream (String  name)
          지정된 자원을 읽어들이는 입력 스트림을 돌려줍니다.
 Enumeration <URL > getResources (String  name)
          지정된 이름을 가지는 모든 자원을 검색합니다.
static ClassLoader getSystemClassLoader ()
          위양을 위한 시스템 클래스 로더를 돌려줍니다.
static URL getSystemResource (String  name)
          클래스를 로드하기 위해서(때문에) 사용되는 검색 패스로부터, 지정된 이름의 자원을 찾습니다.
static InputStream getSystemResourceAsStream (String  name)
          클래스를 로드하는데 사용되는 검색 패스로부터, 지정된 이름의 자원을, read용으로 오픈합니다.
static Enumeration <URL > getSystemResources (String  name)
          클래스를 로드하기 위해서(때문에) 사용되는 검색 패스로부터, 지정된 이름의 모든 자원을 찾습니다.
 Class <? > loadClass (String  name)
          지정된바이너리명을 가지는 클래스를 로드합니다.
protected  Class <? > loadClass (String  name, boolean resolve)
          지정된바이너리명을 가지는 클래스를 로드합니다.
protected  void resolveClass (Class <? > c)
          지정된 클래스를 링크합니다.
 void setClassAssertionStatus (String  className, boolean enabled)
          이 클래스 로더 및 내부의 상자 구조 클래스내의 이름 첨부의 톱 레벨 클래스에 대해서, 목적의 선언 상태를 설정합니다.
 void setDefaultAssertionStatus (boolean enabled)
          이 클래스 로더의 디폴트 선언 상태를 설정합니다.
 void setPackageAssertionStatus (String  packageName, boolean enabled)
          이름 첨부 패키지의 디폴트 선언 상태를 설정합니다.
protected  void setSigners (Class <? > c, Object [] signers)
          클래스의 서명자를 설정합니다.
 
클래스 java.lang. Object 로부터 상속된 메소드
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
 

생성자 의 상세

ClassLoader

protected ClassLoader(ClassLoader  parent)
지정된 친클래스 로더를 사용해, 위양을 위해서(때문에) 새로운 클래스 로더를 작성합니다.

시큐리티 매니저가 존재할 경우에, 시큐리티 매니저의 checkCreateClassLoader 메소드가 불려 갑니다. 이것은 시큐리티 예외가 되는 경우가 있습니다.

파라미터:
parent - 부모의 클래스 로더
예외:
SecurityException - 시큐리티 매니저가 존재해, 그 checkCreateClassLoader 메소드가 새로운 클래스 로더의 작성을 허가하지 않는 경우
도입된 버젼:
1.2

ClassLoader

protected ClassLoader()
getSystemClassLoader() 메소드에 의해 반환된 ClassLoader 를 친클래스 로더로서 사용해, 새로운 클래스 로더를 작성합니다.

시큐리티 매니저가 존재할 경우에, 시큐리티 매니저의 checkCreateClassLoader 메소드가 불려 갑니다. 이것은 시큐리티 예외가 되는 경우가 있습니다.

예외:
SecurityException - 시큐리티 매니저가 존재해, 그 checkCreateClassLoader 메소드가 새로운 클래스 로더의 작성을 허가하지 않는 경우
메소드의 상세

loadClass

public Class <? > loadClass(String  name)
                   throws ClassNotFoundException 
지정된바이너리명을 가지는 클래스를 로드합니다. 이 메소드는,loadClass(String, boolean) 메소드와 같은 방법으로 클래스를 검색합니다. Java 가상 머신이 이 메소드를 호출해, 클래스 참조를 해결합니다. 이 메소드를 호출하는 것은,loadClass(name, false) 를 호출하는 것에 상당합니다.

파라미터:
name - 클래스의바이너리명
반환값:
결과적으로 얻을 수 있는 Class 객체
예외:
ClassNotFoundException - 클래스가 발견되지 않았던 경우

loadClass

protected Class <? > loadClass(String  name,
                             boolean resolve)
                      throws ClassNotFoundException 
지정된바이너리명을 가지는 클래스를 로드합니다. 이 메소드의 디폴트 구현에서는, 다음의 순서로 클래스를 검색합니다.

  1. findLoadedClass(String) 를 호출해, 클래스가 벌써 로드 되었는지의 여부를 확인한다

  2. 친클래스 로더로 loadClass 메소드를 호출한다. 부모가 null 의 경우, 가상 머신에 짜넣어진 클래스 로더가 대신에 호출한다

  3. findClass(String) 메소드를 호출해, 클래스를 찾는다

상기의 순서로 클래스가 발견되었을 경우,resolve 플래그가 true 때에는, 이 메소드는 결과적으로 얻을 수 있는 Class 객체에 대해서 resolveClass(Class) 메소드를 호출합니다.

ClassLoader 의 서브 클래스가, 이 메소드는 아니고 findClass(String) 를 오버라이드(override) 하는 것이 추천 되고 있습니다.

파라미터:
name - 클래스의바이너리명
resolve - true 의 경우는, 클래스를 해석 처리한다
반환값:
결과적으로 얻을 수 있는 Class 객체
예외:
ClassNotFoundException - 클래스가 발견되지 않는 경우

findClass

protected Class <? > findClass(String  name)
                      throws ClassNotFoundException 
지정된바이너리명을 가지는 클래스를 찾습니다. 이 메소드는, 클래스를 로드하기 위한 위양 모델에 준거하는 클래스 로더 구현에 의해 오버라이드(override) 되어 필요한 클래스의 친클래스 로더의 체크 후에 loadClass 메소드에 의해 불려 갑니다. 디폴트의 구현은 ClassNotFoundException 를 throw 합니다.

파라미터:
name - 클래스의바이너리명
반환값:
결과적으로 얻을 수 있는 Class 객체
예외:
ClassNotFoundException - 클래스가 발견되지 않는 경우
도입된 버젼:
1.2

defineClass

@Deprecated 
protected final Class <? > defineClass(byte[] b,
                                                int off,
                                                int len)
                              throws ClassFormatError 
추천 되고 있지 않습니다.  defineClass(String, byte[], int, int) 로 옮겨졌습니다.

바이트의 배열을 Class 클래스의 인스턴스로 변환합니다. 최초로 Class 를 해결하지 않으면, 클래스를 사용할 수 없습니다. 이 메소드보다,바이너리명을 최초의 인수로서 취득하는 버젼이 안전하기 때문에, 그 버젼을 사용하는 것을 추천합니다.

파라미터:
b - 클래스 데이터를 구성하는 바이트. off 로부터 off+len-1 까지의 위치에 있는 byte 는,Java 가상 머신 스펙으로 정의되는 유효한 클래스 파일의 형식을 가지는
off - 클래스 데이터의 b 의 개시 오프셋(offset)
len - 클래스 데이터의 길이
반환값:
지정된 클래스 데이터로부터 작성된 Class 객체
예외:
ClassFormatError - 데이터가 유효한 클래스를 포함하지 않았던 경우
IndexOutOfBoundsException - off 또는 len 의 어느 쪽인지가 부의 경우, 또는 off+lenb.length 보다 큰 경우
관련 항목:
loadClass(String, boolean) , resolveClass(Class)

defineClass

protected final Class <? > defineClass(String  name,
                                     byte[] b,
                                     int off,
                                     int len)
                              throws ClassFormatError 
바이트의 배열을 Class 클래스의 인스턴스로 변환합니다. 최초로 Class 를 해결하지 않으면, 클래스를 사용할 수 없습니다.

이 메소드는, 디폴트 ProtectionDomain 를, 새롭게 정의된 클래스에 할당합니다. ProtectionDomain 는,Policy.getPolicy(). getPermissions(new CodeSource(null, null)) 가 불려 갔을 때에 반환되는 액세스권과 같은 액세스권을 보관 유지합니다. 디폴트의 도메인은 defineClass 의 최초의 호출로 작성되어 그 후의 호출로 재사용됩니다.

특정의 ProtectionDomain 를 클래스에 할당하려면 ,ProtectionDomain 를 그 인수의 1 개로서 취하는 defineClass 메소드를 사용합니다.

파라미터:
name - 클래스가 예상되는바이너리명 . 불명한 경우는 null
b - 클래스 데이터를 구성하는 바이트. off 로부터 off+len-1 까지의 위치에 있는 byte 는,Java 가상 머신 스펙으로 정의되는 유효한 클래스 파일의 형식을 가지는
off - 클래스 데이터의 b 의 개시 오프셋(offset)
len - 클래스 데이터의 길이
반환값:
지정된 클래스 데이터로부터 작성된 Class 객체
예외:
ClassFormatError - 데이터가 유효한 클래스를 포함하지 않았던 경우
IndexOutOfBoundsException - off 또는 len 의 어느 쪽인지가 부의 경우, 또는 off+lenb.length 보다 큰 경우
SecurityException - 이 클래스와는 다른 증명서 세트 (부호 없음)를 사용해 서명된 클래스를 포함한 패키지에, 이 클래스를 추가하려고 하는 경우, 또는 name가 「java. 」(으)로 시작되는 경우
도입된 버젼:
1.1
관련 항목:
loadClass(String, boolean) , resolveClass(Class) , CodeSource , SecureClassLoader

defineClass

protected final Class <? > defineClass(String  name,
                                     byte[] b,
                                     int off,
                                     int len,
                                     ProtectionDomain  protectionDomain)
                              throws ClassFormatError 
옵션의 ProtectionDomain 를 사용해, 바이트의 배열을 Class 클래스의 인스턴스로 변환합니다. 도메인이 null 의 경우는, 디폴트의 도메인이,defineClass(String, byte[], int, int) 의 문서로 지정되고 있는 대로 클래스에 할당할 수 있고 있습니다. 최초로 클래스를 해결하지 않으면, 클래스를 사용할 수 없습니다.

패키지로 정의되는 최초의 클래스는, 그 패키지내에서 연속해 정의된 모든 클래스에 있는, 증명서의 정확한 세트를 판정합니다. 클래스의 증명서세트는, 클래스의 ProtectionDomainCodeSource 로부터 가져옵니다. 그 패키지에 추가된 클래스에는 동일한 증명서세트가 포함되어 있을 필요가 있어, 포함되지 않은 경우는 SecurityException 가 throw 됩니다. name 인수가 null 의 경우, 이 판별은 실행되지 않습니다. 반드시, 정의하는 클래스의바이너리명을 바이트와 함께 건네줄 필요가 있습니다. 이와 같이 해 건네주면(자), 정의하는 클래스는 실제로 생각했던 대로의 클래스가 됩니다.

java. * 패키지의 모든 클래스는 bootstrap 클래스 로더로 밖에 정의할 수 없기 때문에, 「java. 」(으)로 시작되는name를 지정할 수 없습니다. namenull 가 아닌 경우에는, 바이트 배열 「b」로 지정된 클래스의바이너리명에 동일하지 않으면 안됩니다. 동일하지 않은 경우,NoClassDefFoundError 가 throw 됩니다.

파라미터:
name - 클래스가 예상되는바이너리명 . 불명한 경우는 null
b - 클래스 데이터를 구성하는 바이트. off 로부터 off+len-1 까지의 위치에 있는 byte 는,Java 가상 머신 스펙으로 정의되는 유효한 클래스 파일의 형식을 가지는
off - 클래스 데이터의 b 의 개시 오프셋(offset)
len - 클래스 데이터의 길이
protectionDomain - 이 클래스의 ProtectionDomain
반환값:
데이터로부터 작성된 Class 객체와 임의의 ProtectionDomain
예외:
ClassFormatError - 데이터가 유효한 클래스를 포함하지 않았던 경우
NoClassDefFoundError - nameb 로 지정된 클래스의바이너리명으로 동일하지 않은 경우
IndexOutOfBoundsException - off 또는 len 의 어느 쪽인지가 부의 경우, 또는 off+lenb.length 보다 큰 경우
SecurityException - 이 클래스와는 다른 증명서 세트를 사용해 서명된 클래스를 포함한 패키지에, 이 클래스를 추가하려고 하는 경우, 또는 name 가 「java. 」(으)로 시작되는 경우

defineClass

protected final Class <? > defineClass(String  name,
                                     ByteBuffer  b,
                                     ProtectionDomain  protectionDomain)
                              throws ClassFormatError 
옵션의 ProtectionDomain 를 사용해,ByteBufferClass 클래스의 인스턴스로 변환합니다. 도메인이 null 의 경우는, 디폴트의 도메인이,defineClass(String, byte[], int, int) 의 문서로 지정되고 있는 대로 클래스에 할당할 수 있고 있습니다. 최초로 클래스를 해결하지 않으면, 클래스를 사용할 수 없습니다.

패키지의 증명서세트를 결정하고 있는 패키지로 정의된 최초의 클래스에 관한 규칙과 클래스명에서의 제약은,defineClass(String, byte[], int, int, ProtectionDomain) 의 문서로 지정되고 있는 것과 동등합니다.

이 폼의 메소드 호출 cl. defineClass(name, bBuffer, pd) 에서는, 다음의 문장과 정확하게 같은 결과를 얻을 수 있습니다.

...
byte[] temp = new byte[
bBuffer. remaining ()];
bBuffer. get (temp);
return #defineClass(String, byte[], int, int, ProtectionDomain)
cl. defineClass(name, temp, 0, temp.length, pd);

파라미터:
name - 예상되는바이너리명. 불명한 경우는 null
b - 클래스 데이터를 구성하는 바이트. b.position() 로부터 b.position() + b.limit() -1 까지의 위치에 있는 byte 는,Java 가상 머신 스펙으로 정의되는 유효한 클래스 파일의 형식을 가지는
protectionDomain - 이 클래스의 ProtectionDomain, 또는 null
반환값:
데이터로부터 작성된 Class 객체와 임의의 ProtectionDomain
예외:
ClassFormatError - 데이터가 유효한 클래스를 포함하지 않았던 경우
NoClassDefFoundError - nameb 로 지정된 클래스의바이너리명으로 동일하지 않은 경우
SecurityException - 이 클래스와는 다른 증명서 세트를 사용해 서명된 클래스를 포함한 패키지에, 이 클래스를 추가하려고 하는 경우, 또는 name 가 「java. 」(으)로 시작되는 경우
도입된 버젼:
1.5
관련 항목:
defineClass(String, byte[], int, int, ProtectionDomain)

resolveClass

protected final void resolveClass(Class <? > c)
지정된 클래스를 링크합니다. 클래스 로더는 이 메소드를 사용해, 클래스를 링크합니다. c 클래스가 벌써 링크되고 있는 경우, 이 메소드는 단지 복귀합니다. 그렇지 않은 경우,「Java 언어 스펙」의 「Execution」의 장으로 설명하고 있도록(듯이), 클래스는 링크됩니다.

파라미터:
c - 링크하는 클래스
예외:
NullPointerException - cnull 의 경우
관련 항목:
defineClass(String, byte[], int, int)

findSystemClass

protected final Class <? > findSystemClass(String  name)
                                  throws ClassNotFoundException 
지정된바이너리명을 가지는 클래스를 찾아, 필요에 따라서 로드합니다.

이 메소드는 시스템 클래스 로더-(getSystemClassLoader() 를 참조)를 사용해 클래스를 로드합니다. 반환되는 Class 객체는, 그 클래스 객체에 관련한 ClassLoader 를 1 개 이상 가지게 됩니다. ClassLoader 의 서브 클래스는 일반적으로, 이 메소드를 호출할 필요는 없습니다. 이것은, 대부분의 클래스 로더가 findClass(String) 만을 오버라이드(override) 하면 좋기 때문입니다.

파라미터:
name - 클래스의바이너리명
반환값:
지정된 nameClass 객체
예외:
ClassNotFoundException - 클래스가 발견되지 않는 경우
관련 항목:
ClassLoader(ClassLoader) , getParent()

findLoadedClass

protected final Class <? > findLoadedClass(String  name)
이 로더가 이바이너리명을 가지는 클래스의 기동 로더로서 Java 가상 머신에 의해 기록되고 있었을 경우는, 지정된바이너리명을 가지는 클래스를 돌려줍니다. 그 이외의 경우는 null 를 돌려줍니다.

파라미터:
name - 클래스의바이너리명
반환값:
Class 객체. 클래스가 로드되어 있지 않은 경우는 null
도입된 버젼:
1.1

setSigners

protected final void setSigners(Class <? > c,
                                Object [] signers)
클래스의 서명자를 설정합니다. 이 메소드는, 클래스의 정의 후에 호출할 필요가 있습니다.

파라미터:
c - Class 객체
signers - 클래스의 서명자
도입된 버젼:
1.1

getResource

public URL  getResource(String  name)
지정된 이름을 가지는 자원을 검색합니다. 자원은, 클래스 코드로부터 코드 위치에 의존하지 않는 방법으로 액세스 가능한 데이터 (이미지, 오디오, 텍스트 등)입니다.

자원의 이름은, 「/」으로 단락지어진 경로명이며, 이것에 의해 자원이 식별됩니다.

이 메소드는, 우선 자원의 친클래스 로더를 검색합니다. 부모가 null 의 경우, 가상 머신에 짜넣어진 클래스 로더의 패스가 검색됩니다. 거기에 실패하면(자), 이 메소드는 자원을 찾아내기 위해서(때문에) findResource(String) 를 호출합니다.

파라미터:
name - 자원명
반환값:
자원을 읽어들이기 위한 URL. 다만, 자원이 발견되지 않았던 경우나, 호출측이 자원을 취득하는 적절한 특권을 가지고 있지 않은 경우는 null
도입된 버젼:
1.1

getResources

public Enumeration <URL > getResources(String  name)
                              throws IOException 
지정된 이름을 가지는 모든 자원을 검색합니다. 자원은, 클래스 코드로부터 코드 위치에 의존하지 않는 방법으로 액세스 가능한 데이터 (이미지, 오디오, 텍스트 등)입니다.

자원의 이름은, 「/」으로 단락지어진 경로명이며, 이것에 의해 자원이 식별됩니다.

검색순서에 대해서는,getResource(String) 의 문서를 참조해 주세요.

파라미터:
name - 자원명
반환값:
자원에 대한 URL 객체의 열거. 자원이 발견되지 않았던 경우, 열거는 비운다. 클래스 로더가 액세스를 가지지 않는 자원은 열거에 들어가지 않는다
예외:
IOException - 입출력 에러가 발생했을 경우
도입된 버젼:
1.2
관련 항목:
findResources(String)

findResource

protected URL  findResource(String  name)
지정된 이름을 가지는 자원을 검색합니다. 클래스 로더의 구현은, 자원의 로드원을 특정하기 위해서 이 메소드를 오버라이드(override) 합니다.

파라미터:
name - 자원명
반환값:
자원을 읽어들이기 위한 URL 객체. 자원이 발견되지 않았던 경우는 null
도입된 버젼:
1.2

findResources

protected Enumeration <URL > findResources(String  name)
                                  throws IOException 
지정된 이름을 가지는 모든 자원을 나타내는 URL 객체의 열거를 돌려줍니다. 클래스 로더의 구현은, 자원의 로드원을 특정하기 위해서 이 메소드를 오버라이드(override) 합니다.

파라미터:
name - 자원명
반환값:
자원 URL 객체의 열거
예외:
IOException - 입출력 에러가 발생했을 경우
도입된 버젼:
1.2

getSystemResource

public static URL  getSystemResource(String  name)
클래스를 로드하기 위해서(때문에) 사용되는 검색 패스로부터, 지정된 이름의 자원을 찾습니다. 이 메소드는 시스템 클래스 로더 (getSystemClassLoader() 를 참조)를 사용해 자원을 찾아냅니다.

파라미터:
name - 자원명
반환값:
자원을 읽어들이기 위한 URL 객체. 자원이 발견되지 않았던 경우는 null
도입된 버젼:
1.1

getSystemResources

public static Enumeration <URL > getSystemResources(String  name)
                                           throws IOException 
클래스를 로드하기 위해서(때문에) 사용되는 검색 패스로부터, 지정된 이름의 모든 자원을 찾습니다. 발견된 자원은 URL 객체 Enumeration 로서 돌려주어집니다.

검색순서에 대해서는,getSystemResource(String) 의 문서를 참조해 주세요.

파라미터:
name - 자원명
반환값:
자원 URL 객체의 열거
예외:
IOException - 입출력 에러가 발생했을 경우
도입된 버젼:
1.2

getResourceAsStream

public InputStream  getResourceAsStream(String  name)
지정된 자원을 읽어들이는 입력 스트림을 돌려줍니다.

검색순서에 대해서는,getResource(String) 의 문서를 참조해 주세요.

파라미터:
name - 자원명
반환값:
자원을 읽어들이기 위한 입력 스트림. 자원이 발견되지 않았던 경우는 null
도입된 버젼:
1.1

getSystemResourceAsStream

public static InputStream  getSystemResourceAsStream(String  name)
클래스를 로드하는데 사용되는 검색 패스로부터, 지정된 이름의 자원을, read용으로 오픈합니다. 이 메소드는 시스템 클래스 로더 (getSystemClassLoader() 를 참조)를 사용해 자원을 찾아냅니다.

파라미터:
name - 자원명
반환값:
자원을 읽어들이기 위한 입력 스트림. 자원이 발견되지 않았던 경우는 null
도입된 버젼:
1.1

getParent

public final ClassLoader  getParent()
위양을 위한 친클래스 로더를 돌려줍니다. 구현에 따라서는 null 를 사용해, bootstrap 클래스 로더를 나타내는 경우도 있습니다. 이 메소드는, 이 클래스 로더의 부모가 bootstrap 클래스 로더의 경우에, 그러한 구현으로 null 를 돌려줍니다.

시큐리티 매니저가 존재하는 경우, 호출측의 클래스 로더가 null 가 아니고, 이 클래스 로더의 상위 객체도 아닌 경우는, 이 메소드는 RuntimePermission("getClassLoader") 액세스권을 사용해 시큐리티 매니저의 checkPermission 메소드를 호출하는 것에 의해, 친클래스 로더에 문제 없게 액세스 할 수 있는 것을 보증합니다. 그렇지 않은 경우는,SecurityException 가 throw 됩니다.

반환값:
부모의 ClassLoader
예외:
SecurityException - 시큐리티 매니저가 존재해, 그 checkPermission 메소드가 이 클래스 로더의 친클래스 로더에의 액세스를 허가하지 않는 경우
도입된 버젼:
1.2

getSystemClassLoader

public static ClassLoader  getSystemClassLoader()
위양을 위한 시스템 클래스 로더를 돌려줍니다. 이것은, 새로운 ClassLoader 인스턴스의 디폴트의 위양의 부모로, 일반적으로, 어플리케이션을 기동하기 위한 클래스 로더입니다.

이 메소드가 최초로 불려 가는 것은, 실행시의 기동 순서의 초기입니다. 이 시점에서, 메소드는 시스템 클래스 로더를 작성해, 호출하는 Thread 의 문맥 클래스 로더에 그것을 설정합니다.

디폴트의 시스템 클래스 로더는, 이 클래스의 구현 의존 인스턴스입니다.

이 메소드의 최초의 호출시에, 시스템 프로퍼티 「java.system.class.loader」가 정의되는 경우, 이 프로퍼티의 값이 시스템 클래스 로더로서 반환되는 클래스의 이름이 됩니다. 이 클래스는, 디폴트의 시스템 클래스 로더를 사용해 로드 됩니다. 또, 이 클래스는, 위양의 부모로서 사용되는,ClassLoader 형의 단일의 파라미터를 취하는 public 생성자 을 정의할 필요가 있습니다. 다음에, 이 생성자 을 사용해, 디폴트의 시스템 클래스 로더를 파라미터로 지정해, 인스턴스가 작성됩니다. 결과적으로 얻을 수 있는 클래스 로더는, 시스템 클래스 로더로서 정의됩니다.

시큐리티 매니저가 존재해, 호출측의 클래스 로더가 null 가 아니고, 호출측의 클래스 로더가 시스템 클래스 로더와 같지 않는가 게다가 위객체도 아닌 경우, 이 메소드는 RuntimePermission("getClassLoader") 액세스권을 사용해 시큐리티 매니저의 checkPermission 메소드를 호출하는 것으로, 시스템 클래스 로더에 액세스 할 수 있을지 어떨지를 확인합니다. 그렇지 않은 경우는,SecurityException 가 throw 됩니다.

반환값:
위양을 위한 시스템 ClassLoader. 없는 경우는 null
예외:
SecurityException - 시큐리티 매니저가 존재해, 그 checkPermission 메소드가 이 시스템 클래스 로더에의 액세스를 허가하지 않는 경우
IllegalStateException - java.system.class.loader」프로퍼티에 의해 지정된 클래스 로더의 구축시에, 재귀적으로 불려 가는 경우
Error - 시스템 프로퍼티 「java.system.class.loader」는 정의되지만, 이름 첨부 클래스를 로드할 수 없는 경우, 프로바이더 클래스는 필수 생성자 을 정의하지 않는지, 그 호출시에 예외가 throw 된다. 에러의 근본 원인은,Throwable.getCause() 메소드를 사용해 취득할 수 있다

definePackage

protected Package  definePackage(String  name,
                                String  specTitle,
                                String  specVersion,
                                String  specVendor,
                                String  implTitle,
                                String  implVersion,
                                String  implVendor,
                                URL  sealBase)
                         throws IllegalArgumentException 
ClassLoader 로 이름을 사용해 패키지를 정의합니다. 이것에 의해, 클래스 로더는 그 클래스의 패키지를 정의합니다. 클래스를 정의하기 전에, 패키지를 작성할 필요가 있습니다. 패키지명에 대해서는, 클래스 로더내에서 일의로 해, 작성 후의 재정의나 변경은 할 수 없습니다.

파라미터:
name - 패키지명
specTitle - 스펙의 타이틀
specVersion - 스펙의 버젼
specVendor - 스펙의 벤더
implTitle - 구현의 타이틀
implVersion - 구현의 버젼
implVendor - 구현의 벤더
sealBase - null 가 아닌 경우, 이 패키지는 지정된 코드 소스 URL 객체를 고려해 씰 된다. 그렇지 않은 경우, 패키지는 씰 되지 않는다
반환값:
새롭게 정의된 Package 객체
예외:
IllegalArgumentException - 패키지명이, 이 클래스 로더인가 또는 게다가 위객체 가운데 1 개에 존재하는 패키지와 중복 하는 경우
도입된 버젼:
1.2

getPackage

protected Package  getPackage(String  name)
이 클래스 로더인가 게다가 위객체의 어떤 것 등에 의해서 정의된 Package 를 돌려줍니다.

파라미터:
name - 패키지명
반환값:
지정된 이름에 대응하는 Package. 발견되지 않는 경우는 null
도입된 버젼:
1.2

getPackages

protected Package [] getPackages()
이 클래스 로더와 게다가 위객체에 의해 정의된 모든 Packages 를 돌려줍니다.

반환값:
ClassLoader 에 의해 정의된 Package 객체의 배열
도입된 버젼:
1.2

findLibrary

protected String  findLibrary(String  libname)
네이티브 라이브러리의 절대 경로명을 돌아갑니다. VM 는, 이 메소드를 호출해, 이 클래스 로더에 의해 로드 된 클래스의 네이티브 라이브러리를 검색합니다. 이 메소드가 null 를 돌려주는 경우, VM 는 「java.library.path」프로퍼티으로 지정된 패스에 따라 라이브러리를 검색합니다.

파라미터:
libname - 라이브러리명
반환값:
네이티브 라이브러리의 절대 패스
도입된 버젼:
1.2
관련 항목:
System.loadLibrary(String) , System.mapLibraryName(String)

setDefaultAssertionStatus

public void setDefaultAssertionStatus(boolean enabled)
이 클래스 로더의 디폴트 선언 상태를 설정합니다. 이 설정에 의해, 장래, 이 클래스 로더가 로드 및 초기화하는 클래스의, 디폴트 선언이 유효 또는 무효로 결정됩니다. setPackageAssertionStatus(String, boolean) 또는 setClassAssertionStatus(String, boolean) 를 호출하는 것으로, 이 설정을 패키지 또는 클래스 단위로 오버라이드(override) 할 수 있습니다.

파라미터:
enabled - 이 클래스 로더에 의해 로드 되는 클래스의 선언이, 디폴트로 유효한 경우는 true, 디폴트로 무효인 경우는 false
도입된 버젼:
1.4

setPackageAssertionStatus

public void setPackageAssertionStatus(String  packageName,
                                      boolean enabled)
이름 첨부 패키지의 디폴트 선언 상태를 설정합니다. 패키지의 디폴트 선언 상태에 의해, 이름 첨부 패키지 또는 그 「서브 패키지」의 어떤 것인가에 속하는, 장래 초기화되는 클래스의 선언 상태가 정해집니다.

p 라는 이름의 패키지의 서브 패키지는, 모두 이름이 「p. 」(으)로 시작됩니다. 예를 들어,javax.swing.textjavax.swing 의 서브 패키지입니다. 또,java.utiljava.lang.reflect 는 어느쪽이나,java 의 서브 패키지입니다.

1 개의 클래스에 복수의 디폴트 패키지 적용되는 경우에는, 그 클래스에 가장 관련성의 높은 디폴트 패키지가, 다른 패키지에 우선해 사용됩니다. 예를 들어,javax.langjavax.lang.reflect 를 어느쪽이나 관련지을 수 있었던 디폴트 패키지를 보관 유지하는 경우, 후자의 디폴트 패키지는 javax.lang.reflect 내의 클래스에 적용됩니다.

디폴트 패키지는, 클래스 로더의 디폴트 선언 상태보다 우선됩니다. 다만,setClassAssertionStatus(String, boolean) 를 호출하는 것으로, 클래스 단위로 오버라이드(override) 할 수 있습니다.

파라미터:
packageName - 패키지 디폴트 선언 상태를 설정하는 패키지명. null 치는, 「current」의 무명 패키지인 것을 나타낸다 (「Java 언어 스펙」, 섹션 7.4. 2)
enabled - 이 클래스 로더에 의해 로드 되어 이름 첨부 패키지 또는 그 서브 패키지의 어떤 것인가에 속하는 클래스가, 디폴트로 유효한 선언을 보관 유지하는 경우는 true, 디폴트로 무효인 선언을 보관 유지하는 경우는 false
도입된 버젼:
1.4

setClassAssertionStatus

public void setClassAssertionStatus(String  className,
                                    boolean enabled)
이 클래스 로더 및 내부의 상자 구조 클래스내의 이름 첨부의 톱 레벨 클래스에 대해서, 목적의 선언 상태를 설정합니다. 이 설정은, 클래스 로더의 디폴트 선언 상태, 및 패키지 단위로 적용 가능한 디폴트에 우선됩니다. 이름 첨부 클래스가 초기화 끝난 경우, 이 메소드는 무효가 됩니다 (클래스의 초기화 후에 선언 상태를 변경할 수 없기 때문에).

이름 첨부 클래스가 톱 레벨의 클래스가 아닌 경우, 이 호출은, 어떠한 클래스의 선언 상태에 대해서도 영향을 주지 않습니다.

파라미터:
className - 선언 상태를 설정하는 톱 레벨의 클래스의 완전 수식 클래스명
enabled - 초기화시에, 이름 첨부 클래스에서 선언을 유효하게 하는 경우는 true, 선언을 무효로 하는 경우는 false
도입된 버젼:
1.4

clearAssertionStatus

public void clearAssertionStatus()
이 클래스 로더의 디폴트 선언 상태를 false 로 설정해, 클래스 로더에 관련지을 수 있었던 디폴트 패키지 및 클래스 선언 상태 설정을 모두 파기합니다. 이 메소드를 이용하면(자), 클래스 로더가 커멘드행 또는 지속적인 선언 상태 설정을 모두 무시하기 위해(때문에), 「깨끗한 상태로」기동할 수 있습니다.

도입된 버젼:
1.4

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.