java 类加载时机及顺序
1. 类加载时机
当发生如下情况时,java的类加载器会将类加载到内存中:
- 当new一个类时,即新建一个类;
- 调用累的静态方法、读取静态变量、或设置静态变量时;
- 当使用反射调用一个类时;
- 初始化一个子类时,如果其父类未初始化,则需要先初始化其父类;
- 程序运行时需要指定一个主类,即main方法所在的类,虚拟机会优先初始化这个类;
- jdk7动态语言所支持的一些情况;
当发生如上情况时,系统会将类加载到内存中;
2. 类加载顺序
类加载顺序如下:
- 父类的静态字段和父类的静态代码块;
- 子类的静态字段和子类的静态方法;
- 父类非静态字段和非静态代码块;
- 父类构造器;
- 子类非静态字段和非静态代码块;
- 子类构造器 。
优先级相同时,按在类中出现的顺序加载;
范例如下:
package TestClassxunanxian;
public class TestStatic {
public static void main(String[] args) {
// father son=new Son();
// father son2=new Son();
// son.fatherstatic();
// System.out.println(father.a);
Son son=new Son();
}
}
class Son extends father{
String str="子