package com.test;

class ClassA{

public static int param=1;

static{

param=4;

System.out.println("A-S1");//A-S1 3

System.out.println(param);

}

public ClassA(){


action();

}

public void action(){

System.out.println("A-a2");

}

}

public class ClassB extends ClassA{

public ClassB(){

param=1000;

}

public void action(){

System.out.println("param is"+param);

   System.out.println("B-a1");

}

public static void main(String[] args) {

new ClassB();

}

}

=======================================================

从这段代码可以看出,当ClassB被实例化后,首先会去实例化父类,当父类有静态块的时候会先运行静态块。然后调用父类的无参构造方法,也就是调用action()。

这时候父类有个action.子类也有个Action。调用的是子类的action.

随便子类的构造方法中param=1000,但得出,父类的静态static只在静态代码块中改变值,

在子类构造方法中不会改变

所有输出A-S1 4 paramis 4 b-a1;