1 public class Test1 { 2 public static void main(String[] args) { 3 new B(); 4 System.out.println("------------"); 5 new B(); 6 B b=new B(); 7 System.out.println(b.v5); 8 } 9 }10 11 class A{12 int v1=1;13 int v5=5;14 static int v2=2;15 static{16 System.out.println("A的静态块");17 }18 public A(){19 System.out.println("A的构造方法");20 }21 }22 23 class B extends A{24 int v3=3;25 //int v5=6;26 static int v4=4;27 static{28 System.out.println("B的静态块");29 }30 public B(){31 System.out.println("B的构造方法");32 }33 }
此类主要用来研究java对象的创建过程
打印结果为
A的静态块B的静态块A的构造方法B的构造方法------------A的构造方法B的构造方法A的构造方法B的构造方法5
对象创建时,会优先访问当前类的父对象,然后将父类中的静态常量,静态代码块进行初始化,
然后初始化当前类的静态常量以及静态代码块, 而后会执行父类的构造方法,然后在执行本类的构造方法
如果子类的对象在调用某个属性时,会先访问子类,如果有则进行赋值,如果没有,则会去父类中进行寻找,再进行赋值.
如果父类和子类都有该属性,则优先使用当前类的属性.