import java.util.*;
public class Main
{
public static void main(String[] args){
Student s = new Student(5);
s.show();
}
}
class Person{
public Person(){
System.out.println("父初始化");
show();
}
public void show(){
System.out.println("父show");
}
}
class Student extends Person{
public int age=10;
public Student(int age){
super();
//编译后this.age=10插入到这里;
show();
this.age=age;
}
@Override
public void show()
{
System.out.println("子show年龄是"+age);
}
}
打印:
父初始化
子show年龄是0
子show年龄是10
子show年龄是5
变量的初始化顺序:
1.当类第一次使用时,JVM就会加载该类,如果该类存在父类,那么就先加载父类,这是一个递归过程,直到Object为止.
在类加载中,首先进行静态成员变量按照默认值进行初始化,
然后按照在类中声明的顺序执行静态代码块和静态变量的显示初始化.
这个过程从父类到子类,并且只会执行一次!!!
2.当父类与子类的静态代码初始化完成后,如果创建了类的对象,
在初始化子类前,会先对其父类的实例变量进行默认初始化,
然后按照在类中的声明顺序来执行代码块与实例变量的显示初始化,
最后调用父类的构造函数,这也是一个递归过程,直到Object类为止.
(这个过程在每次创建对象时,都会执行!!!)