java面试一日一题:讲下在什么情况下会发生类加载

问题:请讲下在什么情况下会发生类加载?

分析:该问题主要考察对java中类加载的知识,什么是类加载,为什么会发生类加载,什么情况下发生类加载?

回答要点:

主要从以下几点去考虑

1、什么是类加载;

2、为什么会发生类加载;

3、什么情况下发生类加载;

大家都知道java程序要运行,必须要把源文件(.java)编译成字节码(.class),jvm的输入是字节码文件,需要把字节码文件加载到jvm内存中,如何解析字节码文件,按照什么样的规则去解析,解析后放在内存中的什么位置,这些过程可以理解未类加载。通俗点讲,一个java文件要运行必须通过类加载的过程,转化为JVM可以识别的数据结构。在JVM中规定了加载的步骤,可参考:《java面试一日一题:java的类加载过程》

至于为什么会发生类加载的过程,那肯定是要运行java程序,因为java源程序JVM是不可识别的,编译后的字节码文件JVM可以识别,但是也要转化成JVM可以识别的数据结构,所以要有类加载的过程;

java程序对类的使用分为主动使用和被动使用,只有主动使用才会发生类的加载,下面看发生类加载的情形,

1、访问类的静态变量,如果类没有加载,则首先会执行类加载;

2、访问类的静态方法,如果类没有加载,则首先会执行类加载;

3、初始化一个类的子类的时候,如果子类没有加载,则首先执行子类的加载;

4、使用new关键字,生成一个对象,如果该类没有加载,则首先加载该类;

5、使用反射,Class.forName();如果该类没有加载,则执行该类的加载;

6、标记为启动类的类,如果没有加载则首先执行该类的加载,常见的是main方法所在的类;

7、1.7提供的动态语言支持;

你可能感兴趣的:(java面试一日一题:讲下在什么情况下会发生类加载)