继承与初始化

看Java编程思想总结下自己未懂的吧:

class A {
private int i = 1;
protected int j ;
A (){
System.out.println("i =  " + i + ", j = " + j);
j = 55;
}
private static int a1 = print("static A.a1 is initialized");
static int  print(String s) {
System.out.println(s);
return 11;
}
}

public class B extends A {
private int k = print("B.k is initialized");
public B (){
System.out.println("k = " + k);
System.out.println(" j = " + j);
}
private static int b2 = print("static B.b2 is initialized");
public static void main(String[] args) {
System.out.println("begin new Object");
B b = new B();
}
}

输出顺序如下:
static a1 is initialized
static B.b2 is initialized
begin
i =  1, j = 0
B.k is initialized
k = 11
j = 55

很是不解,为了加深印象,笔记之以备以后复习
当我们运行此程序时,第一件事情肯定是访问B的main方法,于是类加载器开始启动并找出B类被编译的的class文件,在对其加载过程中编译器看到他还有父类(根据extends知道)于是继续进行加载父类,必要的类加载完毕后,才会new对象。
因为成员初始化是先静态(创建对象之前就会被初始化),
后非静态的。不管你是否new对象,都会输出:
static a1 is initialized
static B.b2 is initialized
然后开始创建对象,输出:
i =  1, j = 0
B.k is initialized
k = 11
j = 55

你可能感兴趣的:(编程,J#)