ืืืขืื ืืืชืชื
ืืื ืืฉืืฉ ืืืกืคืงืช ืงืื ืืชืื ืืืืืืจ ื-JVM, ืืฉืจ ืืืืืกื ืืืจื ืืื ืืงืืฆืื ืขื ืืกืืืืช.class
, ืื ื ืืชื ืืืฉืืื ืื ืืืงืืจืืช ืืืจืื, ืืืฉื, ืืืจืื ืืจื ืืจืฉืช ืื ืฉื ืืฆืจื ืขื ืืื ืืืคืืืงืฆืื ืขืฆืื. ืขื ืคื ืืคืจื Java SE, ืขื ืื ืช ืืืคืขืื ืงืื ื-JVM, ืขืืื ืืืฆืข ืฉืืืฉื ืฉืืืื:
-
ืืขืื ืช bytecode ืืืฉืืืื ืืืฆืืจืช ืืืคืข ืฉื ืืืืืงื
Class
ืื ืืืื ืืืคืืฉ ืืืจ ืืืืืงื ืืืืืงืฉืช ืืื ืืื ืฉื ืืขื ื ืงืืื ืืื, ืืฉืืช ืงืื ืืชืื ืืืขืื ื ืืืืืงืช ื ืืื ืืชื, ืืฆืืจืช ืืืคืข ืฉื ืืืืืงื
Class
(ืืขืืืื ืืืชื ืืืื ืจืืฆื) ืืืขืื ืช ืืืืงืืช ืื. ืื ืืืืงืืช ืืืืฉืงื ืื ืื ื ืืขื ื, ืืื ืืืืืงื ืืืืืืจืช ื ืืฉืืช ืื ื ืืขื ืช. -
ืืืืื (ืื ืงืืฉืืจ)
ืขื ืคื ืืืคืจื, ืฉืื ืื ืืืืืง ืืฉืืืฉื ืฉืืืื ื ืืกืคืื:
- ืืืืืช , ื ืืืงืช ื ืืื ืืช ื-bytecode ืฉืืชืงืื.
- ืืื ื , ืืงืฆืืช ืืืืจืื RAM ืืฉืืืช ืกืืืืื ืืืชืืืื ืขื ืขืจืื ืืจืืจืช ืืืื (ืืืงืจื ืื, ืืชืืื ืืคืืจืฉ, ืื ืงืืื, ืืชืจืืฉ ืืืจ ืืฉืื ืืืชืืื).
- ืจืืืืืฆืื , ืจืืืืืฆืื ืฉื ืงืืฉืืจืื ืกืืืืื ืฉื ืกืืืื, ืฉืืืช ืืฉืืืืช.
-
ืืชืืื ืืืืืืืงื ืฉืืชืงืื
ืืื, ืื ืืืื ืืคืกืงืืืช ืืงืืืืืช, ื ืจืื ืฉืืื ืืจืืจ ืื ืฆืจืื ืืงืจืืช. ืื ืืืื, ืืืืื, ืืขื ืืื ืืืืื ืืื ืื ืงืืจื ืืืืืง.
- ืืฉ ืืืขืื ืืช ืืืืืงื ืืืืืื ืืคื ื ืืงืืฉืืจ.
- ืืืืงื ืืืืืช ืืืืืืง ืืืืืื ืืืืืื ืืคื ื ืืชืืืื.
- ืฉืืืืืช ืืจืืืืืฆืืืช ืงืืฉืืจ ืืชืจืืฉืืช ืืืืื ืืคืขืืช ืืชืืื ืืช, ืื ืื ืื ืืืื ืืฉืื ืืงืืฉืืจ.
ืกืืื ืืขืืืกื Java
ืืฉื ื ืฉืืืฉื ืืขืืืกืื ืกืื ืืจืืืื ื-Java, ืฉืื ืืื ืืื ืืืขื ืืืืงื ืืืืงืื ืกืคืฆืืคื:-
Bootstrap ืืื ืืืขืื ืืกืืกื, ืื ืงืจื ืื Primordial ClassLoader.
ืืืขื ืืืืงืืช JDK ืกืื ืืจืืืืช ืืืจืืืื rt.jar
-
Extension ClassLoader โ ืืขืืืก ืืจืืื.
ืืืขื ืืืชืืช ืืจืืืืช, ืืืืืงืืืช ืืกืคืจืืืช jre/lib/ext ืืืจืืจืช ืืืื, ืื ื ืืชื ืืืืืืจ ืขื ืืื ืืืคืืื ืืืขืจืืช java.ext.dirs
-
System ClassLoader - ืืืขืื ืืขืจืืช.
ืืืขื ืืืชืืช ืืืฉืืืื ืืืืืืจืืช ืืืฉืชื ื ืืกืืืื CLASSPATH
ืืืืงื ืืืคืฉืืช ClassLoader
ืื ืืืขืื, ืืืขื ืืืกืืก, ืืื ืฆืืฆื ืฉื ืืืขืื ืืืืคืฉืjava.lang.ClassLoader
. ืืืืืื, ืืืืฉืื ืฉื ืืืขืื ืืืจืืื ืืื ืืืืืงื sun.misc.Launcher$ExtClassLoader
, ืืืืขื ืืืขืจืืช ืืื sun.misc.Launcher$AppClassLoader
. ืืืขืื ืืืกืืก ืืื ืืงืืจื ืืืืืฉืื ืฉืื ืืืื ื-JVM. ืื ืฉืืขืืจ ืฉืืชืจืื java.lang.ClassLoader
ืืืื ืืกืคืง ืืจื ืืฉืื ืืืืขืื ืฉืืขืืจืื ืขื ืืืืง ื'ืง ืืืืชื. ืืฉื ืื, ืืฉ ืฆืืจื ืืืืืืจ ืืืืฉ ืืช ืืฉืืืืช ืืืชืืืืืช, ืฉืืจืืข ืื ื ืืืื ืืฉืงืื ืจืง ืืืืคื ืฉืืื, ืืืืืื ืื ืืื ืชื ืืช ืื ืืฉื ืืื ืืคืจืื ืคืจืืื. ืื ื ืื:
package java.lang;
public abstract class ClassLoader {
public Class<?> loadClass(String name);
protected Class<?> loadClass(String name, boolean resolve);
protected final Class<?> findLoadedClass(String name);
public final ClassLoader getParent();
protected Class<?> findClass(String name);
protected final void resolveClass(Class<?> c);
}
loadClass(String name)
ืืืช ืืฉืืืืช ืืฆืืืืจืืืช ืืืืืืืช, ืฉืืื ื ืงืืืช ืืื ืืกื ืืืขืื ืช ืืืืงืืช. ืืืืฉืื ืฉืื ืืกืชืื ืืงืจืืืช ืฉืืื ืืืื ืช ืืืจืช loadClass(String name, boolean resolve)
, ืฉืืฉ ืืขืงืืฃ ืืืชื. ืื ืืชื ืืกืชืื ืขื ื-Javadoc ืฉื ืฉืืื ืืืื ืช ืื, ืืชื ืืืื ืืืืื ืืฉืื ืืื ืืื: ืฉื ื ืคืจืืืจืื ืืกืืคืงืื ืืงืื. ืืืื ืืื ืืฉื ืืืื ืืจื ืฉื ืืืืืงื (ืื ืฉื ืืืืืงื ืืืืื) ืฉืฆืจืื ืืืขืื. ืฉื ืืืืืงื ืืฆืืื ืขื ืจืฉืืื ืฉื ืื ืืืืืืืช. ืืคืจืืืจ ืืฉื ื ืืื ืืื ืฉืงืืืข ืื ื ืืจืฉืช ืจืืืืืฆืืืช ืงืืฉืืจ ืกืืืืืืืช. ืืืจืืจืช ืืืื ืืื false , ืื ืฉืืืืจ ืฉืืฉืชืืฉืื ืืืขืื ืช ืืืืงื ืขืฆืื. ืืืืฉื, ืขื ืคื ืืชืืขืื, ืืืืฉืื ืืจืืจืช ืืืืื ืฉื ืืฉืืื, ืืชืืฆืขืช ืงืจืืื findLoadedClass(String name)
, ืืืืืงืช ืื ืืืืืงื ืืืจ ื ืืขื ื ืืขืืจ, ืืื ืื, ืืืืืจื ืืคื ืื ืืืืืงื ืื. ืืืจืช, ืชืืงืจื ืฉืืืช ืืขืื ืช ืืืืืงื ืฉื ืืืขื ืืื. ืื ืืฃ ืืื ืืืืขืืืกืื ืื ืืฆืืื ืืืฆืื ืืืืงื ืืขืื ื, ืื ืืื ืืื, ืืคื ืกืืจ ืืคืื, ืื ืกื ืืืฆืื ืืืืขืื ืืช ืืืืืงื ืืื, ืชืื ืขืืงืฃ ืืช ื- findClass(String name)
. ืื ืืืืื ืืืชืจ ืคืืจืื ืืคืจืง "ืชืื ืืช ืืขืื ืช ืืืชืืช". ืืืืกืืฃ, ืืืจืื ืืืื, ืืืืจ ืืขืื ืช ืืืืืงื, ืืืชืื ืืืื ื- resolve , ืืืืื ืืื ืืืขืื ืืืืงืืช ืืืืฆืขืืช ืงืืฉืืจืื ืกืืืืื. ืืืืื ืืจืืจื ืืื ืฉื ืืชื ืืงืจืื ืืฉืื ืืจืืืืืฆืื ืืฉืื ืืขืื ืช ืืืืืงื. ืืืชืื ืืื, ืขื ืืื ืืจืืืช ืืืืืงื ClassLoader
ืืขืงืืฃ ืืฉืืืืช ืฉืื, ืืืืขื ืืืืชืื ืืืฉืืช ืืืื ืืืืฉื ืืช ืืืืืืื ืฉืื ืืืขืืจืช ืงืื ืืชืื ืืืืฉื ืืืืจืืืืื. Java ืื ืชืืืืช ืืงืื ืกืคื ืฉื ืืืขืื ืืืืงืืช "ื ืืืื". ืืืืขื ืื ืืืื ืืื ืื ืฉืืขื ืืช ืืืืืงื ืืืืฆืขืช ืืขืช. ืื ืืืืงื ืืืืขืช ืืืืื ืืืขืื ื ืืขื, ืืชืืืื ืืงืื ืืืืข ืื ืขื ืืื ืงืจืืื ืฉืื String.class.getClassLoader()
. ืขืืืจ ืื ืืืืงืืช ืืืืฉืืืื, ืืืขืืืก ื"ื ืืืื" ืืื ืืืจื ืืื ืืืขืจืืช.
ืฉืืืฉื ืขืงืจืื ืืช ืฉื ืืขืื ืช ืืืชืืช
-
ืึดืฉืืึทืึทืช
ืืืงืฉื ืืืขืื ืืช ืืืืืงื ืืืขืืจืช ืืืืขืื ืืื, ืื ืืกืืื ืืืขืื ืืช ืืืืืงื ืขืฆืื ืืชืืฆืข ืจืง ืื ืืืขื ืืื ืื ืืฆืืื ืืืฆืื ืืืืขืื ืืช ืืืืืงื. ืืืฉื ืื ืืืคืฉืจืช ืื ืืืขืื ืืืืงืืช ืขื ืืืขืืืก ืืงืจืื ืืื ืืืคืฉืจ ืืืกืืก. ืื ืืฉืื ื ืจืืืช ืืขืืืืช ืืงืกืืืืืช. ืื ืืืขืื ืฉืืืจ ืชืืขืื ืฉื ืืฉืืขืืจืื ืฉื ืืขื ื ืขื ืืื, ืืืืงื ืืืชื ืืืืืื ืฉืื. ืงืืืฆืช ืืืืืงืืช ืืืื ื ืงืจืืช ืืืงืฃ.
-
ืจึฐืืึผืช
ืืืขืืืก ืจืืื ืจืง ืืช ืืืืชืืช "ืฉืื" ืืืช ืืืืชืืช ืฉื "ืืืืจื" ืืืื ืื ืืืฉื ืืืื ืืฉืืขืืจืื ืฉืืืขืื ืขื ืืื "ืืืื".
-
ืืืืืืืืช
ื ืืชื ืืืขืื ืืืืงื ืคืขื ืืืช ืืืื. ืื ืื ืื ืืืฆืื ืืืืื ืฉืืืืขืื ืฉืืืื ืืขืื ืช ืืืืงื ืื ืืขืืืก ืืืืงื ืฉื ืืขื ื ืืขืืจ ื-JVM.
ืขืจืืช ืืขืื ืช ืืืชืืช
ืืืฉืจ ืืชืจืืฉืช ืงืจืืื ืืืขืื ืช ืืืืงื, ืืืืงื ืื ืืชืืฆืขืช ืืืืคืืฉ ืืืืืื ืฉื ืืืืงืืช ืฉื ืืขื ื ืืืจ ืฉื ืืืืขื ืื ืืืื. ืื ืืืืืงื ืืจืฆืืื ืื ื ืืขื ื ืืขืืจ, ืขืงืจืื ืืืฆืื ืืขืืืจ ืืช ืืฉืืืื ืืืืขืื ืืื, ืฉื ืืฆื ืืจืื ืืืช ืืืื ืืืชืจ ืืืืจืจืืื. ืื ืืืขืื ืืื ืื ืกื ืืืฆืื ืืช ืืืืืงื ืืจืฆืืื ืืืืืื ืฉืื. ืื ืืืืืงื ืืืจ ื ืืขื ื ืืืืืขืื ืืืืข ืืช ืืืงืืื, ืืืClass
ืืืืืจ ืืืืืืงื ืืืืชื ืืืืงื. ืื ืื, ืืืืคืืฉ ืืืืฉื ืขื ืฉืืื ืืืืข ืืืืขื ืืืชืืื ืืืกืืกื. ืื ืืืืขืื ืืืกืืก ืืื ืืืืข ืขื ืืืืืงื ืื ืืจืฉืช (ืืืืืจ, ืืื ืขืืืื ืื ื ืืขื), ื-bytecode ืฉื ืืืืืงื ืืื ืืืคืฉ ืืืืงืื ืืืืืงืืช ืฉืืืืขืื ืื ืชืื ืืืืข ืขืืืื, ืืื ืืืืืงื ืื ืืืืื ืืืืืขื, ืืืงืจื ืชืืืืจ ืืืืขืื ืืืื, ืฉืื ืกื ืืืขืื ืืืงืืจืืช ืืืืืจืื ืื. ืืคื ืฉืฆืืื ืืขืื, ืืืงืื ืืืืืงืืช ืขืืืจ ืืืขืื ืืืกืืก ืืื ืกืคืจืืืช rt.jar, ืขืืืจ ืืืขื ืืืจืืื - ืืกืคืจืืื ืขื ืืจืืืืช jre/lib/ext, ืขืืืจ ืืืขืจืืช ืืืช - CLASSPATH, ืขืืืจ ืืืฉืชืืฉ ืื ืืืื ืืืืืช ืืฉืื ืฉืื ื . ืืคืืื, ืืืชืงืืืืช ืฉื ืืืืงืืช ืืืขืื ื ืืืืืช ืืืืืื ืืืคืื - ืืืืขืื ืืฉืืจืฉ ืื ืื ืืืื. ืืืฉืจ ื-bytecode ืฉื ืืืืืงื ื ืืฆื, ืืืืืงื ื ืืขื ืช ืืชืื ื-JVM ืืืชืงืื ืืืคืข ืืืกืื Class
. ืืคื ืฉืืชื ืืืื ืืจืืืช ืืงืืืช, ืขืจืืช ืืืขืื ื ืืืชืืืจืช ืืืื ืืืืฉืื ืฉื ืืฉืืื ืืขืื loadClass(String name)
. ืืืื ื ืืชื ืืจืืืช ืชืจืฉืื ืื ืืชืจืฉืื.
ืืืกืงื ื
ืืฉืืืื ืืจืืฉืื ืื ืฉื ืืืืื ืฉืคื, ืืื ืฆืืจื ืืืืื ืืืืื ืืืฆื ืืืืงืืช ื ืืขื ืืช ื-Java, ืื ืืืืขืช ืืขืงืจืื ืืช ืืืกืืกืืื ืืืื ืชืขืืืจ ืื ืืืืื ืข ืืืืืืฉ ืืืฉืจ ื ืชืงืืื ืืฉืืืืืช ืืืืClassNotFoundException
ืื NoClassDefFoundError
. ืืืื, ืื ืืคืืืช ืืืืื ืืขืจื ืื ืฉืืจืฉ ืืืขืื. ืืคืืื, ืืืฆื ืื ืืืื ClassNotFoundException
ืืชืจืืฉ ืืืฉืจ ืืืืงื ื ืืขื ืช ืืืืคื ืืื ืื ืืืืื ืืคืขืืช ืืชืืื ืืช, ืืืฉืจ ืืืขืืืกืื ืืื ื ืืืืืื ืืืฆืื ืืช ืืืืืงื ืื ืืจืฉืช ืื ืืืืืื ืื ืืืืจื ื ืชืื ืืืืืงื. ืืื ืืฉืืืื NoClassDefFoundError
ืงืจืืืืช ืืืชืจ ืืืชืจืืฉืช ืืืฉืจ ืืืืืงื ืื ืืจืฉืช ืืืืชื ืืืื ื ืืืืื ืืืืืืจ, ืื ืื ืืืืชื ืืืืื ืืืืื ืืคืขืืช ืืชืืื ืืช. ืื ืืืื ืืงืจืืช ืื ืืชืืื ืืช ืฉืืื ืืืืื ืืช ืืกืคืจืืื ืฉืื ืืื ืืฉืชืืฉืช. ืืืื, ืขืฆื ืืื ืช ืืขืงืจืื ืืช ืฉื ืืื ื ืืืื ืื ืืชื ืืฉืชืืฉ ืืขืืืืชื (ืืื ืืืืงื ืืืืื ืืจืืจื ืืืคืืจืืช ืืืขืืงืื) ืืืกืืคื ืืืืจืืช ืืกืืืืช ืืืื ืช ืืชืืืืืื ืืืชืจืืฉืื ืืชืื ืื ืื ืื ืื, ืืฉืจ ื ืชืืจ, ืืืืื ืืฉืืืืฉ ืืืื ืืืื ืื.
GO TO FULL VERSION