类初始化过程和实例初始化过程。

时间:2021-05-13 19:37:49

时隔半年又去面试了一下,发现很多基础知识都忘了,补补。

先看一个例子:

类初始化过程和实例初始化过程。

结果如下:

类初始化过程和实例初始化过程。

解释如下:

类初始化过程:

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>()方法中就是正在创建的对象。