Site Overlay

面试会问的-java反射(包含简述类加载流程)

1、jvm 怎么构建一个实例?

创立目标进程:

A a = new A() ;

  1. 加载类{ClassLoader 加载 .class 文件到内存1. 经过javac 编译后的 字节码(.class)文件 被 ClassLoader 加载进内存 (进入办法区面试会问的-java反射(包括简述类加载流程));
    2. 在办法区中 生成 Class 目标 - Cl标签5ass<该类> 目标;
    3. 创立实例目标;
    4. 将实例目标放入 堆中 ;
    ​履行静态代码块 和 静态初始化句子}
  2. 履行 new ,请求一片内存空间;
  3. 调用结构器,创立一个空白目标;
  4. 子类调用标签20父类结构器;
  5. 结构器履行{履行结构代码块和初始化句子结构器内容}

经过 new 创立实例目标和反射创立实例,都绕不开 Class 目标。

2、类加载器 加载 .class 文件:

分为三标签10过程:

1. 查看1是否现已加载,标签3有就直接回来,防止重复加载;
  1. 当时缓存中的确没有该类,遵从父优先加载机制,加载 .class文件;
  2. 上面两步都失标签5败,调用 findClass() 办法加载。

注: ClassLoader 类自身是抽象类,不能经过 new 创立目标。因而 ClassLoader 面试会问的-java反射(包括简述类加载流程)中的 findClass() 办法面试会问的-java反射(包括简述类加载流程) 只用来抛标签20出反常。就是说 父类 ClassLoader 中面试会问的-java反射(包括简述类加载流程)的 findClass() 无法加载 .class 文件。

ClassLoader 类中的 findClass(标签3) 办法 :

protected Class
throw new ClassNotFoundException(var1);
}

依据需求重写父类 findClass() 办法。

defineClass() Clas标签1s标签5Loader 界说的办法,意图是 依据 .class 文件面试会问的-java反射(包括简述类加载流程)的字节数组 byte[]面试会问的-java反射(包括简述类加载流程) b 造出对应的 Class 目标 ( Class<类名> )。

类加载流程

2、反射 API 日常开发的首要效果:

  • 创立目标
  • 反射调用办法

创立实标签14例的难点在于,很多人不知道clazz.newInstance()底层还标签5是调用Contructor目标的newInst面试会问的-java反射(包括简述类加载流程)ance()。所以,要想调用clazz.newInstance(),有必要确保编写类的时分有个无参结构。

Copyright © 2020 贝博体育网站-贝博体育网. All Rights Reserved. | 贝博体育网站-贝博体育网为广大客户提供了一个丰富的体育信息平台,随时为你更新,让你爱不释手。贝博体育网站激情体育,尽在这里! 贝博体育网全面报道国内、英超、德甲、欧冠等的赛事安排,体坛明星应有尽有。 by Catch Themes