刚刚学完子类实例化过程,总结出来的实例化过程,和大家分享,
希望有那些不对的,请高手指教。
一下是我做的事例代码,执行后的结果是: (从结果中的编号和代码作比对就很容易看出程序执行的过程了)
(1)Person static10
(2)Student static99
(3)Persion100lishi
(4)Student100lishi
(5)Student名
- class ExtendsTest
- {
- public static void main(String[] args)
- {
- Student s=new Student(100,"名");
- }
- }
- //----------------------------------------------Person.class
- class Person
- {
- public static int age=10;
- String name="lishi";
- //静态代码块
- static
- {
- System.out.println("(1)Person static"+age);
- }
- //构造方法
- public Person(int age)
- {
- this.age=age;
- System.out.println("(3)Persion"+age+name);
- }
- }
- //---------------------------------------------Student.class
- class Student extends Person
- {
- static int ss=99;
- //静态代码块
- static
- {
- System.out.println("(2)Student static"+ss);
- }
- //构造方法
- Student(int age)
- {
- super(age);
- System.out.println("(4)Student"+age+name);
- }
- Student(int age,String name)
- {
- this(age);
- this.name=name;
- System.out.println("(5)Student"+name);
- }
- }
复制代码
/*
过程总结
1、new Student()子类时,先加载父类Person
2、创建Person类内的对象成员并进行默认初始化,然后加载并执行static静态代码块
3、加载Student子类,创建子类内的对象并进行默认初始化,然后加载并执行static静态代码块
4、根据new Student()的参数列表,执行相对应的构造方法,并对构造方法中的形式参数赋值
5、查看构造方法中是否有this()调用语句,有就执行。没有就调用super()语句或隐式的super()语句
6、本例中有this(age);语句,所以先执行父类的Student(int age)构造方法
7、然后在重复第5,发现Student(int age)构造方法没有this()语句,但有super(age)语句,就执行了
8、根据super()语句的参数列表选择父类中对应的构造方法public Person(int age)并对构造方法中的形式参数
赋值,执行并重复5。发现没有没有this()和super()语句,就追溯到Object类为止。
9、对当前类中的成员变量显示初始化,执行构造函数中的代码。
10、后返回上个子类的构造函数,重复9,直到最后一个子类最后一个构造函数执行完成。
*/
|