执行过程:
static修饰的成员再JVM第一次使用该类就会被加载到内存中
静态部分:类被第一次使用时,先加载静态成员变量的定义,再按照书写顺序由上至下执行;如静态代码块内的代码和静态成员变量定义时的初始化赋值过程。
实例部分:对象每次被实例化时,先加载实例成员变量的定义,再按照书写顺序由上至下执行;如实例代码块内的代码和实例成员变量定义时的初始化赋值过程。
(1)父类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
(2)子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
(3)父类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
(4)执行父类构造方法。
(5)子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
(6)执行子类构造方法。
public static void main(String[] args) {
// T1 t = new T1();
T2 t2 = new T2();
// T1 t1 = new T1();
// t.A();
t2.A();
}
class T1{
static{
System.out.println("我是父类静态代码块");
}
{
System.out.println("我是父类构造代码块");
}
public T1(){
System.out.println("我是父类构造方法");
}
public void A(){
{System.out.println("我是父类普通代码块");}
}
}
class T2 extends T1{
static {
System.out.println("我是子类静态代码块");
}
{
System.out.println("我是子类构造代码块");
}
public T2(){
System.out.println("我是子类构造方法");
}
public void A(){
System.out.println("我是子类普通方法");
}
}
输出:
我是父类静态代码块
我是子类静态代码块
我是父类构造代码块
我是父类构造方法
我是子类构造代码块
我是子类构造方法
我是子类普通方法
练习题:
public class Test{
static int cnt = 6;
static{
cnt += 9;
}
public static void main(String[] args){
System.out.println(“cnt =” + cnt);
}
static{
cnt /=3;
};
}
cnt的值是
A、cnt=5
B、cnt=2
C、cnt=3
D、cnt=6
答案:A