Java类加载机制中最重要的就是程序初始化过程,其中包含了静态资源,非静态资源,父类子类,构造方法之间的执行顺序。这类知识经常会出现在面试题中,如果没有搞清楚其原理,在复杂的开源设计中可能无法梳理其业务流程,是java程序员进阶的阻碍。
首先通过一个例子来分析java代码的执行顺序:
public class CodeBlockForJava extends BaseCodeBlock {
{
System.out.println("这里是子类的普通代码块");
}
public CodeBlockForJava() {
System.out.println("这里是子类的构造方法");
}
@Override
public void msg() {
System.out.println("这里是子类的普通方法");
}
public static void msg2() {
System.out.println("这里是子类的静态方法");
}
static {
System.out.println("这里是子类的静态代码块");
}
public static void main(String[] args) {
BaseCodeBlock bcb = new CodeBlockForJava();
bcb.msg();
}
Other o = new Other();
}
class BaseCodeBlock {
public BaseCodeBlock() {
System.out.println("这里是父类的构造方法");
}
public void msg() {
System.out.println("这里是父类的普通方法");
}
public static void msg2() {
System.out.println("这里是父类的静态方法");
}
static {
System.out.println("这里是父类的静态代码块");
}
Other2 o2 = new Other2();
{
System.out.println("这里是父类的普通代码块");
}
}
class Other {
Other() {
System.out.println("初始化子类的属性值");
}
}
class Other2 {
Other2() {
System.out.println("初始化父类的属性值");
}
}
这个例子比较简单,在运行代码之前分析一下:带有stat