Welcome to aparke’s blog
类初始化过程:
- 1.一个类要创建实例需要先加载并初始化该类
- ◆main方法所在的类需要先加载和初始化
- 2.一个子类要初始化需要先初始化父类
- 3.一个类初始化就是执行< clinit>()方法
- ◆< clinit>(方法由静态类变量显示赋值代码和静态代码块组成
- ◆类变量显示赋值代码和静态代码块代码从上到下顺序执行
- ◆< clinit>()方法只执行一次
- 实例初始化过程
- 1.实例初始化就是执行
方法 - ◆
()方法可能重載有多个,有几个构造器就有几个 方法 - ◆
()方法由非静态实例变量显示赋值代码和非静态代码块、对应构造器代码组成 - ◆非静态实例变量显示赋值代码和非静态代码块代码从上到下顺序执行,而对应构造器的代码最后执行
- ◆每次创建实例对象,调用对应构造器,执行的就是对应的
方法 - ◆
方法的首行是 super()或 super(实参列表),即对应父类的 方法 - @author aparke
父类的初始化
1)j = methmod();
1) 父类的静态代码块
父类的实例化方法:
1)super()<最先> 此处不执行
2)i = test();
3)父类的非静态代码块 2,3是按照代码顺序先后执行
4)父类的无参构造<最后>
非静态方法前面其实有一个默认的对象this
this在构造器(或
test()执行的是子类重写的代码,不会执行父类的方法 (面向对象多态)
这里的i=test()执行的是子类重写的test()方法
子类的初始化
1)j = methmod();
2) 子类的静态代码块
其中1) 2) 静态方法和静态代码块是按照顺序执行 是按顺序执行
先初始化父类:5,1
再初始化之类 :6,10
如果不创建对象 那么他们的顺序就是5,1,6,10
子类的实例化方法:
1)super()<最先>
2)i = test();
3)子类的非静态代码块 2),3)子类非静态代码块 和 子类非静态方法是按照代码顺序先后执行
4)子类的无参构造<最后>
因为创建了两个Son对象,因此实例化方法执行了
/*
* 1.方法的重写不可以被重写
* 1)final方法
* 2)静态方法
* 3)private等子类中不可见方法
*
* 2.对象的多态性
* 1)子类对象如果重写了父类的方法,通过子类对象调用的子类一定是子类重写过的代码
* 2)非静态方法默认的调用对象是this
* 3)this对象在构造器或者说<init>方法中即使正在创建的对象
*
*/
代码Father类
package cn.aparke.base; |
代码Son类
package cn.aparke.base; |
运行结果
5父类静态方法 |