Java的类加载器

1.  Java的类载器种类都哪些 

1(Bootstrap) --C++  

2Extension  --位置 jre\lib\ext 

3系统()(System\App)    -- classpath 

4载器(ClassLoader)

2.  类什么候被初始 

1也就new 

2访态变量赋 

3 

4Class.forName("com.lyj.load") 

5会首 

6JVM动类同的 

 6才会 

  

  1没有进行 
  2在直个类还没在一器中类只能初化一

次)父类口) 

  3)初始staticstatic次执 

3.  Java类加体系ClassLoader双亲委托机制 2017-2-24 

java 的语言,箱机语言沙箱 

1 类加 

2 .class文件检验器 

3 内置于Java虚拟机(及语言)的安全特性 

4 安全管理器及Java API 

 载体系: 
java  .java编译  .class文件  .class通过被称ClassLoader加载的,ClassLoder加载使委派  .class文件 

BootStrapClassLoader 类加  ClassLoader  jvm  动时建的 加载 $JAVA_HOME$/jre/lib(或参数-Xbootclasspath)。及到拟机本地法直器的通过作。 

ExtClassLoader载器ClassLoadersun.misc.Launcher为一ExtClassLoader定义 sun.misc.Launcher$ExtClassLoaderExtClassLoader 加载 $JAVA_HOME/jre/lib/ext 下的类库(或者-Djava.ext.dirs 

AppClassLoader器,该 ClassLoader  sun.misc.Launcher 作为个内AppClassLoader sun.misc.Launcher$AppClassLoaderAppClassLoaderjava环境

CLASSPATH

           

CLASSPATH

         

System.getProperty("java.class.path")当然以使-cpjava -cp 路径 class)。 

CustomClassLoader定义载器ClassLoaderClassLoader,比tomcatStandardClassLoader于这情况下使AppClassLoader了。 

前面ClassLoader的几ClassLoader使classClassLoader的双(这CustomClassLoader): 
1AppClassLoaderclass会自求委派给父类加ExtClassLoader去完 

2 ExtClassLoader 载一个 class 首先也不个类BootStrapClassLoader去完成。 

3 BootStrapClassLoader 如在$JAVA_HOME$/jre/lib 里未找到该 class,会使ExtClassLoader 
4ExtClassLoader加载使AppClassLoader加载AppClassLoader,则会ClassNotFoundException 

下面ClassLoaderloadClass(String name, boolean resolve)源码 

1protected synchronized Class> loadClass(String name, boolean resolve)

2 throws ClassNotFoundException {

3  // 首先找缓存是否class 

4  Class c = findLoadedClass(name); 

5  if (c == null) {

6           //没有判断有有父类 

7  try {

8  if (parent != null) {

9                    //话,用父类递归获class 

10  c = parent.loadClass(name, false);

11  } else {

12                   //父类。通过这个方法来加载 

13  c = findBootstrapClassOrNull(name); 

14  }

15  } catch (ClassNotFoundException e) {

16  // ClassNotFoundException thrown if class not found

17  // from the non-null parent class loader

18  }

19  if (c == null) {

20  // 如果还是没有找到,调findClass(name)去找这个类 

21  c = findClass(name); 

22  }

23  }

24  if (resolve) {

25  resolveClass(c); 

26  }

27  return c;

28 }

代码findLoadedClass有的有没parentparent递归

loadClassExtClassLoaderparentfindBootstrapClassOrNullclass

findBootstrapClassOrNull则会JNIprivate native Class findBootstrapClass(String name)“来使

BootStrapClassLoaderclass 

然后parent未找classfindClass来加classfindClass是一protected法,

可以便class 

另外,虽 ClassLoader 加载使 loadClass 方法,但  ClassLoader  子类 

findClass(String)loadClass这样就不的双制。 

双亲 

举个ClassLoaderclass比如class

而一 class 文件是不自定义一 java.lang.Integer 覆盖 jdk  Integer类, 

1. package java.lang;

2. public class Integer {

3.   public Integer(int value) {

4.   System.exit(0);

5.  } 

6. } 

初始Integer造器退JVM应用果使

Integer调用,以为委BootStrapClassLoaderJDKInteger不会加载定义的这测试例: 

1public static void main(String... args) {

2  Integer i = new Integer(1); 

3  System.err.println(i); 

4  }

JVMnew Integer(1)退使用Integer,于是就 

4.  描述一JVMclass 2017-11-15-wl 

JVM 载器ClassLoader的子Java 的类Java 行时运行中的 

由于 Java 过编  Java 不是是一件。 Java 序需要使,JVM 会确、连析)是指.class 文件个字数组.class 后产  Class 成后Class 还不整,所此时的类还不用。当被加载后就进连接阶,这一阶段包验证、备(为静态变量分配内存并设置默认的初始值)和解析(将符号引用替换为直接引用)三个步骤。最  JVM 对类行初始 

如果且这,那 
如果类中存在初化语,就依次执行这初始语句。类的加载由类载器完成的,类载器括:根加载器(BootStrap加载Extension)、System定义java.lang.ClassLoader 的子 

  Java 2JDK 1.2)开始,亲委PDMPDM 证了  Java 平台安全性JVM 带的  Bootstrap加载仅有的加求父类载器类加JVMJava   Bootstrap 引用 

下面的说明: 
    Bootstrap用本地代加载  JVM rt.jar 
    Extension  java.ext.dirs 目录加载  Bootstrap     System加载  Extension广加载classpath 或者  java.class.path 类,的默器。 

5.  获得一类对象有哪些方2017-11-23-wzz 

.classString.class

.getClass()hello.getClass() 

Class.forName()如:Class.forName(java.lang.String) 

你可能感兴趣的:(jvm,java,开发语言)