黑马程序员技术交流社区
标题:
刚学完子类实例化过程,总结出来的实例化过程
[打印本页]
作者:
jkenny
时间:
2014-2-15 16:39
标题:
刚学完子类实例化过程,总结出来的实例化过程
刚刚学完子类实例化过程,总结出来的实例化过程,和大家分享,
希望有那些不对的,请高手指教。
一下是我做的事例代码,执行后的结果是: (从结果中的编号和代码作比对就很容易看出程序执行的过程了)
(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,直到最后一个子类最后一个构造函数执行完成。
*/
作者:
付江涛
时间:
2014-2-15 23:04
我想说,写的好细,感觉对于初学者来说,多分析分析流程,对学习非常好。赞一个
作者:
眷恋之地
时间:
2014-2-15 23:19
总结的好详细!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2