|
JavaTM Platform Standard Ed. 6 |
|||||||||
앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
java.lang.Objectjava.lang.ClassLoader
public abstract class ClassLoader
클래스 로더는, 클래스의 로드를 담당하는 객체입니다. 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"
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 를 사용해, ByteBuffer 를 Class 클래스의 인스턴스로 변환합니다. |
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 |
생성자 의 상세 |
---|
protected ClassLoader(ClassLoader parent)
시큐리티 매니저가 존재할 경우에, 시큐리티 매니저의 checkCreateClassLoader
메소드가 불려 갑니다. 이것은 시큐리티 예외가 되는 경우가 있습니다.
parent
- 부모의 클래스 로더
SecurityException
- 시큐리티 매니저가 존재해, 그 checkCreateClassLoader 메소드가 새로운 클래스 로더의 작성을 허가하지 않는 경우protected ClassLoader()
getSystemClassLoader()
메소드에 의해 반환된 ClassLoader 를 친클래스 로더로서 사용해, 새로운 클래스 로더를 작성합니다.
시큐리티 매니저가 존재할 경우에, 시큐리티 매니저의 checkCreateClassLoader
메소드가 불려 갑니다. 이것은 시큐리티 예외가 되는 경우가 있습니다.
SecurityException
- 시큐리티 매니저가 존재해, 그 checkCreateClassLoader 메소드가 새로운 클래스 로더의 작성을 허가하지 않는 경우메소드의 상세 |
---|
public Class <? > loadClass(String name) throws ClassNotFoundException
loadClass(String, boolean)
메소드와 같은 방법으로 클래스를 검색합니다. Java 가상 머신이 이 메소드를 호출해, 클래스 참조를 해결합니다. 이 메소드를 호출하는 것은,loadClass(name, false)
를 호출하는 것에 상당합니다.
name
- 클래스의바이너리명
ClassNotFoundException
- 클래스가 발견되지 않았던 경우protected Class <? > loadClass(String name, boolean resolve) throws ClassNotFoundException
findLoadedClass(String)
를 호출해, 클래스가 벌써 로드 되었는지의 여부를 확인한다
친클래스 로더로 loadClass
메소드를 호출한다. 부모가 null 의 경우, 가상 머신에 짜넣어진 클래스 로더가 대신에 호출한다
findClass(String)
메소드를 호출해, 클래스를 찾는다
상기의 순서로 클래스가 발견되었을 경우,resolve 플래그가 true 때에는, 이 메소드는 결과적으로 얻을 수 있는 Class 객체에 대해서 resolveClass(Class)
메소드를 호출합니다.
ClassLoader 의 서브 클래스가, 이 메소드는 아니고 findClass(String)
를 오버라이드(override) 하는 것이 추천 되고 있습니다.
name
- 클래스의바이너리명 resolve
- true 의 경우는, 클래스를 해석 처리한다
ClassNotFoundException
- 클래스가 발견되지 않는 경우protected Class <? > findClass(String name) throws ClassNotFoundException
loadClass
메소드에 의해 불려 갑니다. 디폴트의 구현은 ClassNotFoundException 를 throw 합니다.
name
- 클래스의바이너리명
ClassNotFoundException
- 클래스가 발견되지 않는 경우@Deprecated protected final Class <? > defineClass(byte[] b, int off, int len) throws ClassFormatError
defineClass(String, byte[], int, int)
로 옮겨졌습니다.
b
- 클래스 데이터를 구성하는 바이트. off 로부터 off+len-1 까지의 위치에 있는 byte 는,Java 가상 머신 스펙으로 정의되는 유효한 클래스 파일의 형식을 가지는off
- 클래스 데이터의 b 의 개시 오프셋(offset)len
- 클래스 데이터의 길이
ClassFormatError
- 데이터가 유효한 클래스를 포함하지 않았던 경우
IndexOutOfBoundsException
- off 또는 len 의 어느 쪽인지가 부의 경우, 또는 off+len 가 b.length 보다 큰 경우loadClass(String, boolean)
,
resolveClass(Class)
protected final Class <? > defineClass(String name, byte[] b, int off, int len) throws ClassFormatError
이 메소드는, 디폴트 ProtectionDomain
를, 새롭게 정의된 클래스에 할당합니다. ProtectionDomain 는,Policy.getPolicy(). getPermissions(new CodeSource(null, null))
가 불려 갔을 때에 반환되는 액세스권과 같은 액세스권을 보관 유지합니다. 디폴트의 도메인은 defineClass
의 최초의 호출로 작성되어 그 후의 호출로 재사용됩니다.
특정의 ProtectionDomain 를 클래스에 할당하려면 ,ProtectionDomain 를 그 인수의 1 개로서 취하는 defineClass
메소드를 사용합니다.
name
- 클래스가 예상되는바이너리명 . 불명한 경우는 nullb
- 클래스 데이터를 구성하는 바이트. off 로부터 off+len-1 까지의 위치에 있는 byte 는,Java 가상 머신 스펙으로 정의되는 유효한 클래스 파일의 형식을 가지는off
- 클래스 데이터의 b 의 개시 오프셋(offset)len
- 클래스 데이터의 길이
ClassFormatError
- 데이터가 유효한 클래스를 포함하지 않았던 경우
IndexOutOfBoundsException
- off 또는 len 의 어느 쪽인지가 부의 경우, 또는 off+len 가 b.length 보다 큰 경우
SecurityException
- 이 클래스와는 다른 증명서 세트 (부호 없음)를 사용해 서명된 클래스를 포함한 패키지에, 이 클래스를 추가하려고 하는 경우, 또는 name가 「java. 」(으)로 시작되는 경우loadClass(String, boolean)
,
resolveClass(Class)
,
CodeSource
,
SecureClassLoader
protected final Class <? > defineClass(String name, byte[] b, int off, int len, ProtectionDomain protectionDomain) throws ClassFormatError
defineClass(String, byte[], int, int)
의 문서로 지정되고 있는 대로 클래스에 할당할 수 있고 있습니다. 최초로 클래스를 해결하지 않으면, 클래스를 사용할 수 없습니다.
패키지로 정의되는 최초의 클래스는, 그 패키지내에서 연속해 정의된 모든 클래스에 있는, 증명서의 정확한 세트를 판정합니다. 클래스의 증명서세트는, 클래스의 ProtectionDomain 내 CodeSource
로부터 가져옵니다. 그 패키지에 추가된 클래스에는 동일한 증명서세트가 포함되어 있을 필요가 있어, 포함되지 않은 경우는 SecurityException 가 throw 됩니다. name 인수가 null 의 경우, 이 판별은 실행되지 않습니다. 반드시, 정의하는 클래스의바이너리명을 바이트와 함께 건네줄 필요가 있습니다. 이와 같이 해 건네주면(자), 정의하는 클래스는 실제로 생각했던 대로의 클래스가 됩니다.
java. * 패키지의 모든 클래스는 bootstrap 클래스 로더로 밖에 정의할 수 없기 때문에, 「java. 」(으)로 시작되는name를 지정할 수 없습니다. name 가 null 가 아닌 경우에는, 바이트 배열 「b」로 지정된 클래스의바이너리명에 동일하지 않으면 안됩니다. 동일하지 않은 경우,NoClassDefFoundError 가 throw 됩니다.
name
- 클래스가 예상되는바이너리명 . 불명한 경우는 nullb
- 클래스 데이터를 구성하는 바이트. off 로부터 off+len-1 까지의 위치에 있는 byte 는,Java 가상 머신 스펙으로 정의되는 유효한 클래스 파일의 형식을 가지는off
- 클래스 데이터의 b 의 개시 오프셋(offset)len
- 클래스 데이터의 길이protectionDomain
- 이 클래스의 ProtectionDomain
ClassFormatError
- 데이터가 유효한 클래스를 포함하지 않았던 경우
NoClassDefFoundError
- name 가 b 로 지정된 클래스의바이너리명으로 동일하지 않은 경우
IndexOutOfBoundsException
- off 또는 len 의 어느 쪽인지가 부의 경우, 또는 off+len 가 b.length 보다 큰 경우
SecurityException
- 이 클래스와는 다른 증명서 세트를 사용해 서명된 클래스를 포함한 패키지에, 이 클래스를 추가하려고 하는 경우, 또는 name 가 「java. 」(으)로 시작되는 경우protected final Class <? > defineClass(String name, ByteBuffer b, ProtectionDomain protectionDomain) throws ClassFormatError
ByteBuffer
를 Class 클래스의 인스턴스로 변환합니다. 도메인이 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
- 예상되는바이너리명. 불명한 경우는 nullb
- 클래스 데이터를 구성하는 바이트. b.position() 로부터 b.position() + b.limit() -1 까지의 위치에 있는 byte 는,Java 가상 머신 스펙으로 정의되는 유효한 클래스 파일의 형식을 가지는protectionDomain
- 이 클래스의 ProtectionDomain, 또는 null
ClassFormatError
- 데이터가 유효한 클래스를 포함하지 않았던 경우
NoClassDefFoundError
- name 가 b 로 지정된 클래스의바이너리명으로 동일하지 않은 경우
SecurityException
- 이 클래스와는 다른 증명서 세트를 사용해 서명된 클래스를 포함한 패키지에, 이 클래스를 추가하려고 하는 경우, 또는 name 가 「java. 」(으)로 시작되는 경우defineClass(String, byte[], int, int, ProtectionDomain)
protected final void resolveClass(Class <? > c)
c
- 링크하는 클래스
NullPointerException
- c 가 null 의 경우defineClass(String, byte[], int, int)
protected final Class <? > findSystemClass(String name) throws ClassNotFoundException
이 메소드는 시스템 클래스 로더-(getSystemClassLoader()
를 참조)를 사용해 클래스를 로드합니다. 반환되는 Class 객체는, 그 클래스 객체에 관련한 ClassLoader 를 1 개 이상 가지게 됩니다. ClassLoader 의 서브 클래스는 일반적으로, 이 메소드를 호출할 필요는 없습니다. 이것은, 대부분의 클래스 로더가 findClass(String)
만을 오버라이드(override) 하면 좋기 때문입니다.
name
- 클래스의바이너리명
ClassNotFoundException
- 클래스가 발견되지 않는 경우ClassLoader(ClassLoader)
,
getParent()
protected final Class <? > findLoadedClass(String name)
name
- 클래스의바이너리명
protected final void setSigners(Class <? > c, Object [] signers)
c
- Class 객체signers
- 클래스의 서명자public URL getResource(String name)
자원의 이름은, 「/」으로 단락지어진 경로명이며, 이것에 의해 자원이 식별됩니다.
이 메소드는, 우선 자원의 친클래스 로더를 검색합니다. 부모가 null 의 경우, 가상 머신에 짜넣어진 클래스 로더의 패스가 검색됩니다. 거기에 실패하면(자), 이 메소드는 자원을 찾아내기 위해서(때문에) findResource(String)
를 호출합니다.
name
- 자원명
public Enumeration <URL > getResources(String name) throws IOException
자원의 이름은, 「/」으로 단락지어진 경로명이며, 이것에 의해 자원이 식별됩니다.
검색순서에 대해서는,getResource(String)
의 문서를 참조해 주세요.
name
- 자원명
URL
객체의 열거.
자원이 발견되지 않았던 경우, 열거는 비운다.
클래스 로더가 액세스를 가지지 않는 자원은 열거에 들어가지 않는다
IOException
- 입출력 에러가 발생했을 경우findResources(String)
protected URL findResource(String name)
name
- 자원명
protected Enumeration <URL > findResources(String name) throws IOException
URL
객체의 열거를 돌려줍니다. 클래스 로더의 구현은, 자원의 로드원을 특정하기 위해서 이 메소드를 오버라이드(override) 합니다.
name
- 자원명
URL
객체의 열거
IOException
- 입출력 에러가 발생했을 경우public static URL getSystemResource(String name)
getSystemClassLoader()
를 참조)를 사용해 자원을 찾아냅니다.
name
- 자원명
URL
객체. 자원이 발견되지 않았던 경우는 nullpublic static Enumeration <URL > getSystemResources(String name) throws IOException
URL
객체 Enumeration
로서 돌려주어집니다.
검색순서에 대해서는,getSystemResource(String)
의 문서를 참조해 주세요.
name
- 자원명
URL
객체의 열거
IOException
- 입출력 에러가 발생했을 경우public InputStream getResourceAsStream(String name)
검색순서에 대해서는,getResource(String)
의 문서를 참조해 주세요.
name
- 자원명
public static InputStream getSystemResourceAsStream(String name)
getSystemClassLoader()
를 참조)를 사용해 자원을 찾아냅니다.
name
- 자원명
public final ClassLoader getParent()
시큐리티 매니저가 존재하는 경우, 호출측의 클래스 로더가 null 가 아니고, 이 클래스 로더의 상위 객체도 아닌 경우는, 이 메소드는 RuntimePermission("getClassLoader")
액세스권을 사용해 시큐리티 매니저의 checkPermission
메소드를 호출하는 것에 의해, 친클래스 로더에 문제 없게 액세스 할 수 있는 것을 보증합니다. 그렇지 않은 경우는,SecurityException 가 throw 됩니다.
SecurityException
- 시큐리티 매니저가 존재해, 그 checkPermission 메소드가 이 클래스 로더의 친클래스 로더에의 액세스를 허가하지 않는 경우public static ClassLoader getSystemClassLoader()
이 메소드가 최초로 불려 가는 것은, 실행시의 기동 순서의 초기입니다. 이 시점에서, 메소드는 시스템 클래스 로더를 작성해, 호출하는 Thread 의 문맥 클래스 로더에 그것을 설정합니다.
디폴트의 시스템 클래스 로더는, 이 클래스의 구현 의존 인스턴스입니다.
이 메소드의 최초의 호출시에, 시스템 프로퍼티 「java.system.class.loader」가 정의되는 경우, 이 프로퍼티의 값이 시스템 클래스 로더로서 반환되는 클래스의 이름이 됩니다. 이 클래스는, 디폴트의 시스템 클래스 로더를 사용해 로드 됩니다. 또, 이 클래스는, 위양의 부모로서 사용되는,ClassLoader 형의 단일의 파라미터를 취하는 public 생성자 을 정의할 필요가 있습니다. 다음에, 이 생성자 을 사용해, 디폴트의 시스템 클래스 로더를 파라미터로 지정해, 인스턴스가 작성됩니다. 결과적으로 얻을 수 있는 클래스 로더는, 시스템 클래스 로더로서 정의됩니다.
시큐리티 매니저가 존재해, 호출측의 클래스 로더가 null 가 아니고, 호출측의 클래스 로더가 시스템 클래스 로더와 같지 않는가 게다가 위객체도 아닌 경우, 이 메소드는 RuntimePermission("getClassLoader")
액세스권을 사용해 시큐리티 매니저의 checkPermission
메소드를 호출하는 것으로, 시스템 클래스 로더에 액세스 할 수 있을지 어떨지를 확인합니다. 그렇지 않은 경우는,SecurityException 가 throw 됩니다.
SecurityException
- 시큐리티 매니저가 존재해, 그 checkPermission 메소드가 이 시스템 클래스 로더에의 액세스를 허가하지 않는 경우
IllegalStateException
- java.system.class.loader」프로퍼티에 의해 지정된 클래스 로더의 구축시에, 재귀적으로 불려 가는 경우
Error
- 시스템 프로퍼티 「java.system.class.loader」는 정의되지만, 이름 첨부 클래스를 로드할 수 없는 경우, 프로바이더 클래스는 필수 생성자 을 정의하지 않는지, 그 호출시에 예외가 throw 된다. 에러의 근본 원인은,Throwable.getCause()
메소드를 사용해 취득할 수 있다protected Package definePackage(String name, String specTitle, String specVersion, String specVendor, String implTitle, String implVersion, String implVendor, URL sealBase) throws IllegalArgumentException
name
- 패키지명specTitle
- 스펙의 타이틀specVersion
- 스펙의 버젼specVendor
- 스펙의 벤더implTitle
- 구현의 타이틀implVersion
- 구현의 버젼implVendor
- 구현의 벤더sealBase
- null 가 아닌 경우, 이 패키지는 지정된 코드 소스 URL
객체를 고려해 씰 된다. 그렇지 않은 경우, 패키지는 씰 되지 않는다
IllegalArgumentException
- 패키지명이, 이 클래스 로더인가 또는 게다가 위객체 가운데 1 개에 존재하는 패키지와 중복 하는 경우protected Package getPackage(String name)
name
- 패키지명
protected Package [] getPackages()
protected String findLibrary(String libname)
libname
- 라이브러리명
System.loadLibrary(String)
,
System.mapLibraryName(String)
public void setDefaultAssertionStatus(boolean enabled)
setPackageAssertionStatus(String, boolean)
또는 setClassAssertionStatus(String, boolean)
를 호출하는 것으로, 이 설정을 패키지 또는 클래스 단위로 오버라이드(override) 할 수 있습니다.
enabled
- 이 클래스 로더에 의해 로드 되는 클래스의 선언이, 디폴트로 유효한 경우는 true, 디폴트로 무효인 경우는 falsepublic void setPackageAssertionStatus(String packageName, boolean enabled)
p 라는 이름의 패키지의 서브 패키지는, 모두 이름이 「p. 」(으)로 시작됩니다. 예를 들어,javax.swing.text 는 javax.swing 의 서브 패키지입니다. 또,java.util 와 java.lang.reflect 는 어느쪽이나,java 의 서브 패키지입니다.
1 개의 클래스에 복수의 디폴트 패키지 적용되는 경우에는, 그 클래스에 가장 관련성의 높은 디폴트 패키지가, 다른 패키지에 우선해 사용됩니다. 예를 들어,javax.lang 과 javax.lang.reflect 를 어느쪽이나 관련지을 수 있었던 디폴트 패키지를 보관 유지하는 경우, 후자의 디폴트 패키지는 javax.lang.reflect 내의 클래스에 적용됩니다.
디폴트 패키지는, 클래스 로더의 디폴트 선언 상태보다 우선됩니다. 다만,setClassAssertionStatus(String, boolean)
를 호출하는 것으로, 클래스 단위로 오버라이드(override) 할 수 있습니다.
packageName
- 패키지 디폴트 선언 상태를 설정하는 패키지명.
null 치는, 「current」의 무명 패키지인 것을 나타낸다 (「Java 언어 스펙」, 섹션 7.4. 2)enabled
- 이 클래스 로더에 의해 로드 되어 이름 첨부 패키지 또는 그 서브 패키지의 어떤 것인가에 속하는 클래스가, 디폴트로 유효한 선언을 보관 유지하는 경우는 true, 디폴트로 무효인 선언을 보관 유지하는 경우는 falsepublic void setClassAssertionStatus(String className, boolean enabled)
이름 첨부 클래스가 톱 레벨의 클래스가 아닌 경우, 이 호출은, 어떠한 클래스의 선언 상태에 대해서도 영향을 주지 않습니다.
className
- 선언 상태를 설정하는 톱 레벨의 클래스의 완전 수식 클래스명enabled
- 초기화시에, 이름 첨부 클래스에서 선언을 유효하게 하는 경우는 true, 선언을 무효로 하는 경우는 falsepublic void clearAssertionStatus()
|
JavaTM Platform Standard Ed. 6 |
|||||||||
앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.