java中类的加载面试
什么是类的加载? JVM把通过类名获得类的二进制流之后,把类放入方法区,并创建入口对象的过程被称为类的加载。经过加载,类就被放到内存里了。 哪些情况会触发类的初始化? 类在5种情况下会被初始化: 第一,假如这个类是入口类,他会被初始化。 第二,使用new创建对象,或者调用类的静态变量,类会被初始化。不过静态常量不算。 第三,通过反射获取类,类会被初始化 第四,如果子类被初始化,他的父类也会被初始化。 第五,使用jdk1.7的动态语言支持时,调用到静态句柄,也会被初始化。 讲一下JVM加载一个类的过程 同问题1。不过这里也可以问下面试官是不是想问类的生命周期。如果是问类的生命周期,可以回答有"加载、连接、初始化、使用、卸载"五个阶段,连接又可以分为"校验、准备、解析"三个阶段。 什么时候会为变量分配内存? 在准备阶段为静态变量分配内存。 JVM的类加载机制是什么? 双亲委派机制,类加载器会先让自己的父类来加载,父类无法加载的话,才会自己来加载。 双亲委派机制可以打破吗?为什么 可以打破,比如JDBC使用线程上下文加载器打破了双亲委派机制。原因是JDBC只提供了接口,并没有提供实现。 深入原理 类的生命周期 类的生命周期相信大家已经耳熟能详,就像下面这样: 加载 加载主要做三件事: 找到类文件(通过类的全限定名来获取定义此类的二进制字节流) 放入方法区