Java基础知识复习:类加载机制、反射和类初始化
需积分: 10 58 浏览量
更新于2024-09-01
收藏 7KB MD 举报
Java面试题复习第一弹
在 Java 中,反射机制是指在程序运行时动态地获取和操作类的信息的能力。获取到字节码有三种方法:使用 `Class.forName(className)` 方法,使用 `类名.class` 方法,使用 `this.getClass()` 方法。这些方法可以将字节码中的方法、变量、构造函数等映射成相应的 `Method`、`Field`、`Constructor` 等类,这些类提供了丰富的方法可以被我们使用。
类的初始化有多种触发方式,包括创建类的实例、new 一个对象、访问某个类或接口的静态变量、或者对该静态变量赋值、调用类的静态方法、反射、初始化一个类的子类(会首先初始化子类的父类)、JVM 启动时标明的启动类,即文件名和类名相同的那个类。
类的初始化步骤包括:如果这个类还没有被加载和链接,那就先进行加载和链接;如果这个类存在直接父类,并且这个类还没有被初始化(注意:在一个类加载器中,类只能初始化一次),那就初始化直接的父类(不适用于接口);如果类中存在初始化语句(如 static 变量和 static 代码块),那就依次执行这些初始化语句。
Java 的双亲委托机制是指类加载器之间的关系,子类加载器会将加载请求委托给父类加载器,如果父类加载器也不能加载,则继续委托给它的父类加载器,直到达到根加载器,最后如果都不能加载,则抛出 `ClassNotFoundException`。
JVM 加载 class 文件是由类加载器(ClassLoader)和它的子类来实现的,Java 中的类加载器是一个重要的运行时系统组件,它负责在运行时查找和装入类文件中的类。类的加载是指把类的 `.class` 文件中的数据读入到内存中,通常是创建一个字节数组读入 `.class` 文件,然后产生与所加载类对应的 `Class` 对象。加载完成后,`Class` 对象还不完整,所以此时的类还不可用。当类被加载后就进入连接阶段,这一阶段包括验证、准备(为静态变量分配内存并设置默认的初始值)和解析(将符号引用替换为直接引用)三个步骤。最后 JVM 对类进行初始化,包括:如果类中存在直接的父类并且这个类还没有被初始化,那么就先初始化父类;如果类中存在初始化语句,就依次执行这些初始化语句。
类加载器包括:根加载器(BootStrap)、扩展加载器(Extension)、系统加载器(System)和用户自定义类加载器(java.lang.ClassLoader 的子类)。BootStrap 负责加载 JVM 基础核心类库(rt.jar);Extension 从 java.ext.dirs 系统属性所指定的目录中加载类库,它的父加载器是 BootStrap。
本文涵盖了 Java 中的反射机制、类的初始化、双亲委托机制、类加载器、JVM 加载 class 文件等知识点,为 Java 开发者提供了有价值的参考资料。
703 浏览量
3630 浏览量
2022-04-02 上传
2022-04-02 上传
612 浏览量
2022-06-09 上传
2008-03-16 上传
点击了解资源详情
点击了解资源详情
老阿張
- 粉丝: 17
- 资源: 21
最新资源
- Developmentment-school-template-:这是开发学校的静态网站
- 应用之间调用(iPhone源代码)
- Web Clipper Beta-crx插件
- FastDFS集群安装所需要的所有文件
- marklogic-workpapers:MarkLogic MEAN 堆栈应用程序
- Facebook登录页面复制
- simon:没有意义的游戏
- cp-database:编码海盗
- 易语言画心形画苹果形示爱程序-易语言
- scrcpy-win64-v1.14.zip
- Highcharts多个图表共用一个提示框,每个图表多条曲线
- Frosmo Preview-crx插件
- raxy:简单的状态管理器
- strudra:在Python中使用Ghidra结构
- GoStack-02Fundamentos-NodeJS-Desafio05:针对存储库模式的应用在NodeJS中的应用
- IP3_ALB