public abstract class ClassLoader extends Object
ãã¹ãŠã®Classãªããžã§ã¯ãã«ã¯ããããå®çŸ©ããClassLoaderãžã®åç
§ãå«ãŸããŠããŸãã
é
åã¯ã©ã¹ã®Classãªããžã§ã¯ãã¯ãã¯ã©ã¹ã»ããŒããŒã«ãã£ãŠã¯äœæããããJava Runtimeã®èŠæ±ã«å¿ããŠèªåçã«äœæãããŸãã é
åã¯ã©ã¹ã®ã¯ã©ã¹ã»ããŒããŒ(Class.getClassLoader()ããè¿ããã)ã¯ããã®èŠçŽ ã®åã®ã¯ã©ã¹ã»ããŒããŒãšåãã«ãªããŸããèŠçŽ ã®åãããªããã£ãåã®å Žåãé
åã¯ã©ã¹ã¯ã¯ã©ã¹ã»ããŒããŒãæã¡ãŸããã
ã¢ããªã±ãŒã·ã§ã³ã¯ãJavaä»®æ³ãã·ã³ãåçã«ã¯ã©ã¹ãããŒãããããã«æ¡åŒµããããã«ãClassLoaderã®ãµãã¯ã©ã¹ãå®è£ ããŸãã
ã¯ã©ã¹ã»ããŒããŒã¯äžè¬çã«ãã»ãã¥ãªãã£ã»ãããŒãžã£ãã»ãã¥ãªãã£ã»ãã¡ã€ã³ã瀺ãããã«äœ¿ãããŸãã
ClassLoaderã¯ã©ã¹ã¯ãå§è²ã¢ãã«ã䜿ã£ãŠã¯ã©ã¹ãšãªãœãŒã¹ãæ¢ããŸãã ClassLoaderã®åã€ã³ã¹ã¿ã³ã¹ã¯ãé¢é£ãã芪ã¯ã©ã¹ã»ããŒããŒãæã¡ãŸãã ã¯ã©ã¹ãŸãã¯ãªãœãŒã¹ãèŠã€ããããã«åŒã³åºããããšãClassLoaderã€ã³ã¹ã¿ã³ã¹ã¯ããèªäœã§ã¯ã©ã¹ãŸãã¯ãªãœãŒã¹ã®æ€çŽ¢ã詊ã¿ãåã«ããã®æ€çŽ¢ã芪ã¯ã©ã¹ã«å§è²ããŸãã ãããŒãã¹ãã©ããã»ã¯ã©ã¹ã»ããŒããŒããšåŒã°ããä»®æ³ãã·ã³ã®çµèŸŒã¿ã¯ã©ã¹ã»ããŒããŒã¯ããèªäœã§ã¯èŠªãæãããClassLoaderã€ã³ã¹ã¿ã³ã¹ã®èŠªãšããŠåäœããŸãã
ã¯ã©ã¹ã®äžŠè¡ããŒãããµããŒãããã¯ã©ã¹ã»ããŒããŒã¯äžŠè¡å¯èœãªã¯ã©ã¹ã»ããŒããŒãšåŒã°ãããã®ã¯ã©ã¹åæåæã«ClassLoader.registerAsParallelCapableã¡ãœãããåŒã³åºããŠèªèº«ãç»é²ããå¿
èŠããããŸãã ClassLoaderã¯ã©ã¹ã¯ããã©ã«ãã§äžŠè¡å¯èœãšããŠç»é²ãããŸãã ãã ããã®ãµãã¯ã©ã¹ã«ã€ããŠã¯ã䞊è¡å¯èœãªå Žåã«ã¯èªèº«ãç»é²ããå¿
èŠããããŸãã
å§è²ã¢ãã«ãå³å¯ã«éå±€åãããŠããªãç°å¢ã§ã¯ãã¯ã©ã¹ã»ããŒããŒã¯äžŠè¡å¯èœã§ããå¿
èŠããããŸããããã§ãªããšãã¯ã©ã¹ã»ããŒãã»ããã»ã¹äžã«ããŒããŒã®ããã¯ãä¿æããããããã¯ã©ã¹ã»ããŒãæã«ãããããã¯ãçºçããå¯èœæ§ããããŸã(loadClassã¡ãœãããåç
§)ã
éåžžã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 Object |
getClassLoadingLock(String className) |
ã¯ã©ã¹ã»ããŒãæäœçšã®ããã¯ã»ãªããžã§ã¯ããè¿ããŸãã
|
protected Package |
getPackage(String name) |
ãã®ã¯ã©ã¹ã»ããŒããŒããã®ç¥å
ã®ã©ããã«ãã£ãŠå®çŸ©ãããPackageãè¿ããŸãã
|
protected Package[] |
getPackages() |
ãã®ã¯ã©ã¹ã»ããŒããŒãšãã®ç¥å
ã«ãã£ãŠå®çŸ©ããããã¹ãŠã®Packageãè¿ããŸãã
|
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) |
ã¯ã©ã¹ãããŒãããã®ã«äœ¿çšãããæ€çŽ¢ãã¹ãããæå®ãããååã®ãªãœãŒã¹ããèªèŸŒã¿çšã«ãªãŒãã³ããŸãã
|
static Enumeration<URL> |
getSystemResources(String name) |
ã¯ã©ã¹ãããŒãããããã«äœ¿çšãããæ€çŽ¢ãã¹ãããæå®ãããååã®ãã¹ãŠã®ãªãœãŒã¹ãæ¢ããŸãã
|
Class<?> |
loadClass(String name) |
æå®ããããã€ããªåãæã€ã¯ã©ã¹ãããŒãããŸãã
|
protected Class<?> |
loadClass(String name, boolean resolve) |
æå®ããããã€ããªåãæã€ã¯ã©ã¹ãããŒãããŸãã
|
protected static boolean |
registerAsParallelCapable() |
åŒåºãå
ã䞊è¡å¯èœãšããŠç»é²ããŸãã
|
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) |
ã¯ã©ã¹ã®çœ²åè
ãèšå®ããŸãã
|
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)ããªãŒããŒã©ã€ãããããšããèŠãããŸãã
ãã®ã¡ãœããã¯ããªãŒããŒã©ã€ããããªãããããã¯ã©ã¹ã®ããŒãåŠçäžã«ãgetClassLoadingLockã¡ãœããã®çµæã«å¯ŸããŠåæãè¡ããŸãã
name - ã¯ã©ã¹ã®ãã€ããªåresolve - trueã®å Žåã¯ãã¯ã©ã¹ã解決ããClassNotFoundException - ã¯ã©ã¹ãèŠã€ãããªãã£ãå Žåprotected Object getClassLoadingLock(String className)
className - ããŒãããã¯ã©ã¹ã®ååNullPointerException - 䞊è¡å¯èœãšããŠç»é²ãããŠããŠãclassNameãnullã®å ŽåloadClass(String, boolean)protected Class<?> findClass(String name) throws ClassNotFoundException
loadClassã¡ãœããã«ãã£ãŠåŒã³åºãããŸãã ããã©ã«ãã®å®è£
ã¯ClassNotFoundExceptionãã¹ããŒããŸãã 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å
ã§ã®éå§ãªãã»ããlen - ã¯ã©ã¹ã»ããŒã¿ã®é·ãClassFormatError - ããŒã¿ãæå¹ãªã¯ã©ã¹ãå«ãŸãªãã£ãå ŽåIndexOutOfBoundsException - offãŸãã¯lenãè² ã®å ŽåããŸãã¯off+lenãb.lengthãã倧ããå ŽåSecurityException - ãã®ã¯ã©ã¹ãšã¯ç°ãªãäžé£ã®èšŒææžã§çœ²åãããã¯ã©ã¹ãå«ãããã±ãŒãžã«ãã®ã¯ã©ã¹ã远å ããããšããå ŽåããŸãã¯ãjava.ãã§å§ãŸãå®å
šæå®åãæã€ããã±ãŒãžå
ã§ã¯ã©ã¹ãå®çŸ©ããããšããå Žåã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å
ã§ã®éå§ãªãã»ããlen - ã¯ã©ã¹ã»ããŒã¿ã®é·ãClassFormatError - ããŒã¿ãæå¹ãªã¯ã©ã¹ãå«ãŸãªãã£ãå ŽåIndexOutOfBoundsException - offãŸãã¯lenãè² ã®å ŽåããŸãã¯off+lenãb.lengthãã倧ããå ŽåSecurityException - ãã®ã¯ã©ã¹(æªçœ²å)ãšã¯ç°ãªãèšŒææžã»ããã䜿ã£ãŠçœ²åãããã¯ã©ã¹ãå«ãããã±ãŒãžã«ããã®ã¯ã©ã¹ã远å ããããšããå ŽåããŸãã¯nameããjava.ãã§å§ãŸãå ŽåãloadClass(String, boolean), resolveClass(Class), CodeSource, SecureClassLoaderprotected final Class<?> defineClass(String name, byte[] b, int off, int len, ProtectionDomain protectionDomain) throws ClassFormatError
defineClass(String, byte[], int, int)ã®ããã¥ã¡ã³ãã§æå®ãããŠããããã«ãããã©ã«ãã»ãã¡ã€ã³ãã¯ã©ã¹ã«å²ãåœãŠãããŸãã æåã«ã¯ã©ã¹ã解決ããŠããã§ãªããã°ãã¯ã©ã¹ã䜿çšããããšã¯ã§ããŸããã
ããã±ãŒãžã§å®çŸ©ãããæåã®ã¯ã©ã¹ã«ããããã®ããã±ãŒãžå
ã§ç¶ããŠå®çŸ©ããããã¹ãŠã®ã¯ã©ã¹ã«å¿
èŠãªãèšŒææžã®æ£ç¢ºãªã»ãããæ±ºãŸããŸãã ã¯ã©ã¹ã®èšŒææžã®ã»ããã¯ããã®ã¯ã©ã¹ã®ProtectionDomainå
ã®CodeSourceããååŸããŸãã ãã®ããã±ãŒãžã«è¿œå ãããã¯ã©ã¹ã«ã¯åäžã®èšŒææžã®ã»ãããå«ãŸããŠããå¿
èŠããããå«ãŸããŠããªãå Žåã¯SecurityExceptionãã¹ããŒãããŸãã nameãnullã®å Žåããã®å€å¥ã¯å®è¡ãããŸããã å¿
ããå®çŸ©ããã¯ã©ã¹ã®ãã€ããªåããã€ããšãšãã«æž¡ãããã«ããŠãã ããã ãã®ããã«ããŠæž¡ããšãå®çŸ©ããã¯ã©ã¹ã¯å®éã«èãããšããã®ã¯ã©ã¹ã«ãªããŸãã
ãjava.*ãããã±ãŒãžã®ãã¹ãŠã®ã¯ã©ã¹ã¯ããŒãã¹ãã©ããã»ã¯ã©ã¹ã»ããŒããŒã§ããå®çŸ©ã§ããªãã®ã§ããjava.ãã§å§ãŸãnameãæå®ããããšã¯ã§ããŸããã nameãnullã§ãªãå Žåãããã¯ããã€ãé
åãbãã§æå®ãããã¯ã©ã¹ã®ãã€ããªåã«çãããªãå¿
èŠããããŸãããã以å€ã®å Žåã¯ãNoClassDefFoundErrorãã¹ããŒãããŸãã
name - ã¯ã©ã¹ã®äºæ³ããããã€ããªåãäžæãªå Žåã¯nullb - ã¯ã©ã¹ã»ããŒã¿ãæ§æãããã€ãã offããoff+len-1ãŸã§ã®äœçœ®ã«ããbyteã¯ããJavaâ¢ä»®æ³ãã·ã³ä»æ§ãã§å®çŸ©ãããæå¹ãªã¯ã©ã¹ã»ãã¡ã€ã«ã®åœ¢åŒãæã€ off - ã¯ã©ã¹ã»ããŒã¿ã®bå
ã§ã®éå§ãªãã»ããlen - ã¯ã©ã¹ã»ããŒã¿ã®é·ãprotectionDomain - ãã®ã¯ã©ã¹ã®ProtectionDomainClassFormatError - ããŒã¿ãæå¹ãªã¯ã©ã¹ãå«ãŸãªãã£ãå Žå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 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)ã ãããªãŒããŒã©ã€ãããã°ããããã§ãã
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)ãåŒã³åºããŸãã
getResources(String)ã¡ãœãããšç¢ºå®ã«äžèŽããããã«ãªãããšããèŠãããŸããname - ãªãœãŒã¹åpublic Enumeration<URL> getResources(String name) throws IOException
ãªãœãŒã¹ã®ååã¯ã/ã§åºåããããã¹åã§ãããããã«ãã£ãŠãªãœãŒã¹ãèå¥ãããŸãã
æ€çŽ¢é ã«ã€ããŠã¯ãgetResource(String)ã®ããã¥ã¡ã³ããåç
§ããŠãã ããã
getResource(String)ã¡ãœãããšç¢ºå®ã«äžèŽããããã«ãªãããšããèŠãããŸãã ããã«ãããåæã®nextElementã¡ãœããããè¿ãããæåã®èŠçŽ ãå¿
ããgetResource(String)ã¡ãœãããè¿ããªãœãŒã¹ãšåããã®ã«ãªãã¯ãã§ãã name - ãªãœãŒã¹åURLãªããžã§ã¯ãã®åæã ãªãœãŒã¹ãèŠã€ãããªãã£ãå Žåãåæã¯ç©ºã«ãªãã ã¯ã©ã¹ã»ããŒããŒãã¢ã¯ã»ã¹ã§ããªããªãœãŒã¹ã¯åæã«å
¥ããªã IOException - å
¥åºåãšã©ãŒãçºçããå ŽåfindResources(String)protected URL findResource(String name)
name - ãªãœãŒã¹åprotected Enumeration<URL> findResources(String name) throws IOException
URLãªããžã§ã¯ãã®åæãè¿ããŸãã ã¯ã©ã¹ã»ããŒããŒã®å®è£
ã¯ããªãœãŒã¹ã®ããŒãå
ãç¹å®ããããã«ãã®ã¡ãœããããªãŒããŒã©ã€ãããŸãã name - ãªãœãŒã¹åURLãªããžã§ã¯ãã®åæIOException - å
¥åºåãšã©ãŒãçºçããå Žåprotected static boolean registerAsParallelCapable()
ãã£ããã¯ã©ã¹ã»ããŒããŒã䞊è¡å¯èœãšããŠç»é²ãããšããããå ã«æ»ãæ¹æ³ã¯ãããŸããã
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ãã¹ããŒãããŸãã
SecurityException - ã»ãã¥ãªãã£ã»ãããŒãžã£ãååšãããã®checkPermissionã¡ãœããããã®ã¯ã©ã¹ã»ããŒããŒã®èŠªã¯ã©ã¹ã»ããŒããŒãžã®ã¢ã¯ã»ã¹ãèš±å¯ããªãå Žåãpublic static ClassLoader getSystemClassLoader()
ãã®ã¡ãœãããæåã«åŒã³åºãããã®ã¯ãå®è¡æã®èµ·åã·ãŒã±ã³ã¹ã®åæã§ãããã®æç¹ã§ãã¡ãœããã¯ã·ã¹ãã ã»ã¯ã©ã¹ã»ããŒããŒãäœæããåŒã³åºãThreadã®ã³ã³ããã¹ãã»ã¯ã©ã¹ã»ããŒããŒã«ãããèšå®ããŸãã
ããã©ã«ãã®ã·ã¹ãã ã»ã¯ã©ã¹ã»ããŒããŒã¯ããã®ã¯ã©ã¹ã®å®è£ äŸåã€ã³ã¹ã¿ã³ã¹ã§ãã
ãã®ã¡ãœããã®æåã®åŒåºãæã«ãã·ã¹ãã ã»ããããã£ãjava.system.class.loaderããå®çŸ©ãããå Žåããã®ããããã£ã®å€ãã·ã¹ãã ã»ã¯ã©ã¹ã»ããŒããŒãšããŠè¿ãããã¯ã©ã¹ã®ååã«ãªããŸãããã®ã¯ã©ã¹ã¯ãããã©ã«ãã®ã·ã¹ãã ã»ã¯ã©ã¹ã»ããŒããŒã䜿çšããŠããŒããããŸãã ãŸãããã®ã¯ã©ã¹ã¯ãå§è²ã®èŠªãšããŠäœ¿çšããããClassLoaderåã®åäžã®ãã©ã¡ãŒã¿ãåãpublicã³ã³ã¹ãã©ã¯ã¿ãå®çŸ©ããå¿ èŠããããŸãã æ¬¡ã«ããã®ã³ã³ã¹ãã©ã¯ã¿ã䜿çšããããã©ã«ãã®ã·ã¹ãã ã»ã¯ã©ã¹ã»ããŒããŒããã©ã¡ãŒã¿ã«æå®ããŠãã€ã³ã¹ã¿ã³ã¹ãäœæãããŸãã çµæãšããŠåŸãããã¯ã©ã¹ã»ããŒããŒã¯ãã·ã¹ãã ã»ã¯ã©ã¹ã»ããŒããŒãšããŠå®çŸ©ãããŸãã
ã»ãã¥ãªãã£ã»ãããŒãžã£ãååšããåŒåºãå
ã®ã¯ã©ã¹ã»ããŒããŒãnullã§ãªãããã€åŒåºãå
ã®ã¯ã©ã¹ã»ããŒããŒãã·ã¹ãã ã»ã¯ã©ã¹ã»ããŒããŒãšåãã§ããã®ç¥å
ã§ããªãå Žåããã®ã¡ãœããã¯ãã»ãã¥ãªãã£ã»ãããŒãžã£ã®checkPermissionã¡ãœãããRuntimePermission("getClassLoader")ã¢ã¯ã»ã¹æš©ã§åŒã³åºãããšã§ãã·ã¹ãã ã»ã¯ã©ã¹ã»ããŒããŒãžã®ã¢ã¯ã»ã¹ã確èªããŸãã ããã§ãªãå Žåã¯ãSecurityExceptionãã¹ããŒãããŸãã
SecurityException - ã»ãã¥ãªãã£ã»ãããŒãžã£ãååšãããã®checkPermissionã¡ãœããããã®ã·ã¹ãã ã»ã¯ã©ã¹ã»ããŒããŒãžã®ã¢ã¯ã»ã¹ãèš±å¯ããªãå ŽåãIllegalStateException - ãjava.system.class.loaderãããããã£ã«ããæå®ãããã¯ã©ã¹ã»ããŒããŒã®æ§ç¯æã«ãååž°çã«åŒã³åºãããå ŽåãError - ã·ã¹ãã ã»ããããã£ãjava.system.class.loaderãã¯å®çŸ©ãããããååä»ãã¯ã©ã¹ãããŒãã§ããªãå Žåããããã€ãã»ã¯ã©ã¹ã¯å¿
é ã³ã³ã¹ãã©ã¯ã¿ãå®çŸ©ããªããããã®åŒåºãæã«äŸå€ãã¹ããŒãããã ãšã©ãŒã®æ ¹æ¬åå ã¯ã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)ãåŒã³åºããŸãã enabled - ãã®ã¯ã©ã¹ã»ããŒããŒã«ããããŒããããã¯ã©ã¹ã®ã¢ãµãŒã·ã§ã³ããããã©ã«ãã§æå¹ãªå Žåã¯trueãããã©ã«ãã§ç¡å¹ãªå Žåã¯falseãpublic 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)ãåŒã³åºãããšã§ãã¯ã©ã¹åäœã§ãªãŒããŒã©ã€ãã§ããŸãã
packageName - ããã±ãŒãžã»ããã©ã«ãã®ã¢ãµãŒã·ã§ã³ã»ã¹ããŒã¿ã¹ãèšå®ããããã±ãŒãžåã nullå€ã¯ãã«ã¬ã³ããã§ããç¡åããã±ãŒãžã瀺ã(ãJavaâ¢èšèªä»æ§ãã®ã»ã¯ã·ã§ã³7.4.2ãåç
§ã) enabled - ãã®ã¯ã©ã¹ã»ããŒããŒã«ããããŒããããæå®ãããããã±ãŒãžãŸãã¯ãã®ãµãããã±ãŒãžã®ã©ããã«å±ããã¯ã©ã¹ããããã©ã«ãã§æå¹ãªã¢ãµãŒã·ã§ã³ãä¿æããå Žåã¯trueãããã©ã«ãã§ç¡å¹ãªã¢ãµãŒã·ã§ã³ãä¿æããå Žåã¯falseãpublic void setClassAssertionStatus(String className, boolean enabled)
æå®ãããã¯ã©ã¹ããããã»ã¬ãã«ã®ã¯ã©ã¹ã§ã¯ãªãå Žåããã®åŒåºãã¯ãã©ã®ã¯ã©ã¹ã®ã¢ãµãŒã·ã§ã³ã»ã¹ããŒã¿ã¹ã«å¯ŸããŠã圱é¿ãäžããŸããã
className - ã¢ãµãŒã·ã§ã³ã»ã¹ããŒã¿ã¹ãèšå®ãããããã»ã¬ãã«ã®ã¯ã©ã¹ã®å®å
šæå®ã¯ã©ã¹åãenabled - åæåæã«ãæå®ãããã¯ã©ã¹ã§ã¢ãµãŒã·ã§ã³ãæå¹ã«ããå Žåã¯trueãã¢ãµãŒã·ã§ã³ãç¡å¹ã«ããå Žåã¯falseãpublic void clearAssertionStatus()
ãã°ãŸãã¯æ©èœãéä¿¡
詳现ãªAPIãªãã¡ã¬ã³ã¹ããã³éçºè
ããã¥ã¡ã³ãã«ã€ããŠã¯ãJava SEã®ããã¥ã¡ã³ããåç
§ããŠãã ããã ãã®ããã¥ã¡ã³ãã«ã¯ãæŠå¿µçãªæŠèŠãçšèªã®å®çŸ©ãåé¿æ¹æ³ãæå¹ãªã³ãŒãäŸãªã©ã®ãéçºè
ã察象ã«ãããã詳现ãªèª¬æãå«ãŸããŠããŸãã
Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyãåç
§ããŠãã ããã