类实例初始化时代码块和静态代码块的使用
第一 普通的代码块
public class CodeBlockTest { public static void main(String[] args) throws Exception{ new Child();System.out.println("刚刚创建了一个实例"); new Child();System.out.println("刚刚创建了一个实例"); }} class Parent{ public Parent() { System.out.println("父类构造方法"); } { System.out.println("父类普通代码块1"); } { System.out.println("父类普通代码块2"); }} class Child extends Parent{ public Child() { System.out.println("子类构造方法"); } { System.out.println("子类普通代码块"); }}
public class CodeBlockTest {public static void main(String[] args) throws Exception{System.out.println("*****加载子类*****");Class.forName("test2.Child");System.out.println("*****加载子类*****");Class.forName("test2.Child");System.out.println("*****加载父类*****");Class.forName("test2.Parent");System.out.println("*****加载父类*****");Class.forName("test2.Parent");}}class Parent{private int a;private static int b;static{//这是错误的,静态代码块中不能出现非静态的属性和方法//a = 1;//这是错误的,静态代码块中不能出现this和super等关键字//this.b = 10;//这是正确的b = 10;System.out.println("父类静态代码块1");}public Parent() {System.out.println("父类构造方法");}static{System.out.println("父类静态代码块2");}}class Child extends Parent{static{System.out.println("子类静态代码块");}public Child() {System.out.println("子类构造方法");}}
?运行结果是:
*****加载子类*****
父类静态代码块1
父类静态代码块2
子类静态代码块
*****加载子类*****
*****加载父类*****
*****加载父类*****
?
注意:静态代码块中不能出现非静态的属性和方法,也不能出现this和super等关键字。