一个经典的Java的面试题
- 静态代码块:顾名思义就是存放在静态代码区的代码,在类初始化时放入静态代码区,只执行一次
- 普通代码块:随着对象实例的创建而创建
- 构造代码区:对象实例创建时创建
执行顺序:静态代块 -> 普通代码块 -> 构造代码块
简单类实例化过程:静态代码区 -> 静态属性初始化 -> 动态属性初始化 -> 普通代码区 -> 构造函数
作用:一般完成一些类实例创建或类加载前的初始化工作
package com.zhiwei.basic;
public class FatherAndSon {
public static void main(String[] args) {
new Son();
}
private static class Father{
public String name;
//静态代码块
static{
System.out.println("Father Static Code Area........");
}
//普通代码块
{
name="father"; //初始化类属性
System.out.println("Father public Code Area........");
}
//构造代码块
public Father(){
System.out.println("Father construct Code Area........");
}
}
private static class Son extends Father{
//静态代码块
static{
System.err.println("Son Static Code Area........");
}
//普通代码块
{
name="Son"; //初始化类属性
System.err.println("Son public Code Area........");
}
//构造代码块
public Son(){
System.err.println("Son construct Code Area........");
}
}
}
------------------------结果-------------------
Son Static Code Area........
Father Static Code Area........
Son public Code Area........
Son construct Code Area........
Father public Code Area........
Father construct Code Area........
分析: 父类静态代码块 -> 子类静态代码块 -> 父类普通代码块 -> 父类构造代码块(非静态代码块) -> 子类普通代码块 -> 子类构造代码块