1、类加载机制的概念。
Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的加载机制。Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等,Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能,这里就是我们经常能见到的Class类。
2、类文件字节码由哪几部分组成。
http://www.importnew.com/24088.html
3.1 魔数
3.2 版本号
3.3 常量池
3.4 Access_Flag 访问标志
3.5 类索引
3.6父类索引
3.7 接口索引
3.8 字段表集合
3.9 方法
3、类加载过程大体分为几步。
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括了:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(using)、和卸载(Unloading)七个阶段。其中验证、准备和解析三个部分统称为连接(Linking),这七个阶段的发生顺序如下图所示:
各个阶段具体过程: http://blog.csdn.net/fgets/article/details/52934178 http://blog.csdn.net/u011080472/article/details/51329315
4、什么时机发生类加载。 http://blog.csdn.net/liang_70121385/article/details/52496028
5、类的初始化
1.类从顶至底的顺序初始化,所以声明在顶部的字段的早于底部的字段初始化
2.超类早于子类和衍生类的初始化
3.如果类的初始化是由于访问静态域而触发,那么只有声明静态域的类才被初始化,而不会触发超类的初始化或者子类的
4.初始化即使静态域被子类或子接口或者它的实现类所引用。
5.接口初始化不会导致父接口的初始化。
6.静态域的初始化是在类的静态初始化期间,非静态域的初始化时在类的实例创建期间。这意味这静态域初始化在非静态域之前。
7.非静态域通过构造器初始化,子类在做任何初始化之前构造器会隐含地调用父类的构造器,他保证了非静态或实例变量(父类)初始化早于子类
6、类加载器和双亲委派模型
http://www.importnew.com/25295.html
委托机制的意义 — 防止内存中出现多份同样的字节码
能不能自己写个类叫java.lang.System?
答案:不可以,会由父类加载器加载jdk中的java.lang.System。 解释:如果用自定义类加载器强行加载特殊目录的以java.开头的类会报SecurityException。
但是,我们可以自己定义一个类加载器来达到这个目的,为了避免双亲委托机制,这个类加载器也必须是特殊的。由于系统自带的三个类加载器都加载特定目录下的类,如果我们自己的类加载器放在一个特殊的目录,那么系统的加载器就无法加载,也就是最终还是由我们自己的加载器加载。
http://www.cnblogs.com/lanxuezaipiao/p/4138511.html