时隔半年又去面试了一下,发现很多基础知识都忘了,补补。
先看一个例子:
结果如下:
解释如下:
类初始化过程:
1.一个类要创建实例需要先加载并初始化该类。
main方法所在的类需要先加载和初始化。
2.一个子类初始化需要先初始化父类。
3.一个类初始化就是执行<clinit>()方法。
<clinit>()方法由静态类变量显示赋值代码和静态代码块组成。
类变量显示赋值代码和静态代码块代码从上到下顺序执行。
<clinit>()方法只执行一次。
实例初始化过程:
1.实例初始化就是执行<init>()方法过程。
<init>()方法可能重载有多个,有几个构造器就有几个<init>()方法。
<init>()方法由非静态实例变量显示赋值代码和非静态代码块、对应构造器代码组成。
非静态实例变量显示赋值代码和非静态代码从上到下执行,对应的构造器最后执行。
每次创建实例对象,调用对应构造器,执行对应<init>()方法。
<init>()方法的首行是super()或super(实参列表),即对应的父类<init>()方法。
方法的重写Override
1.哪些方法不可以被重写:
final方法、静态方法、private等子类不可见方法。
2.对象的多态性:
子类如果重写了父类的方法,通过子类对象调用的一定是子类重写的代码。
非静态方法默认的调用对象是this。
this对象在构造器或者说<init>()方法中就是正在创建的对象。