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
对象创建时,会优先访问当前类的父对象,然后将父类中的静态常量,静态代码块进行初始化,
然后初始化当前类的静态常量以及静态代码块, 而后会执行父类的构造方法,然后在执行本类的构造方法
如果子类的对象在调用某个属性时,会先访问子类,如果有则进行赋值,如果没有,则会去父类中进行寻找,再进行赋值.
如果父类和子类都有该属性,则优先使用当前类的属性.