面试【JAVA基础】类加载机制
2019-12-19 18:22
1186 查看
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
1、类加载过程
1.1、加载
查找和导入class文件。
1.2、链接
-
验证 检验载入的class文件的正确性,完整性。
-
准备 给类的静态变量分配存储空间,会赋对象类型的默认值。
-
解析 将class常量池中的符号引用转换成直接引用。
符号引用和直接引用的区别:
符号引用:java编译阶段不知道所引用的对象的实际地址,使用符号引用来代替 - 直接引用:能够直接定位到对象的指针,或相对偏移量。能定位到一个对象的内存实际地址。
1.3、初始化
对类的静态变量,代码块执行初始化操作,静态变量赋值顺序根据代码定义的顺序执行。
2、类的加载顺序
- 父类静态成员变量
- 父类静态代码块
- 子类静态成员变量
- 子类静态代码块
- 父类非静态成员变量
- 父类非静态代码块
- 父类构造方法
- 子类非静态成员变量
- 子类非静态代码块
- 子类构造方法
3、类加载时机
- 创建类实例-使用new关键字,反射,克隆,反序列化。
- 调用类的静态变量或者静态方法,或对静态变量进行赋值操作。
- 初始化子类时会先初始化父类。
- 虚拟机启时,包含main方法的启动类。
注意:
- 通过数组定义的引用类,不会造成类的初始化。
- 访问类的静态常量是不会造成类加载的。因为在编译时期,静态常量已经放入类的常量池中了。访问类静态常量其实是直接访问常量池中的常量,不需要加载类。
4、静态常量是什么时候赋值的
静态常量在编译阶段把初始值存入class文件的常量池中,在类的准备阶段,将值赋给静态变量。
5、什么是双亲委派
1.类加载器包括:BootstrapClassLoader、ExtensionClassLoader、 ApplicationClassLoader、自定义的类加载器。 2.双亲委派模型:如果一个类加载器收到了加载类的请求,首先交给父类加载器进行加载,如果父类加载器加载失败,当前类才会自己加载类。 3.双亲委派的作用:避免重复加载,父类已经加载子类不用加载,防止用户自定义加载器加载java核心的api,带来安全隐患。 4.一个类是否被加载是通过全类名和命名空间确定的,命名空间是加载类的加载器名。
6、如何自定义类加载器
继承classloader类,重写findClass方法。
相关文章推荐
- Java基础知识—虚拟机类加载机制
- java学习——java基础(十)之类加载机制
- JAVA类加载机制基础
- 【Java面试整理之JVM】深入理解JVM结构、类加载机制、垃圾回收GC原理、JVM内存分配策略、JVM内存泄露和溢出
- Java基础---Java---基础加强---类加载器、委托机制、AOP、 动态代理技术、让动态生成的类成为目标类的代理、实现Spring可配置的AOP框架
- java基础系列(七)--类编译、加载、和执行机制
- 学习Java基础知识,打通面试关~十七了解类的加载过
- Java基础:JAVA程序类加载及其反射机制
- Java基础学习总结(115)——Java 类加载机制详解
- Java基础-JVM类加载机制
- 学习Java基础知识,打通面试关~十四锁机制
- Java基础(八)-垃圾回收机制、类加载器
- 【Java基础】Hibernate的缓存机制以及延迟加载
- Java基础(十)——类加载机制
- Java基础----Classloader加载机制
- Java基础之类加载机制及反射
- java面试基础-Java中的反射机制
- Java基础——类加载机制及原理
- java基础知识巩固-----类加载机制与反射机制
- Java基础——类加载机制