一个类要创建实例首先就要初始化类
- 类的初始化过程
一个类要创建实例需要先加载并初始化该类,main()方法所在的类需要先加载和初始化
一个子类初始化需要先初始化父类
一个类的初始化就是执行< clinit>()方法(这个方法是自动生成的)
< clinit>()方法有静态类变量显示赋值代码和静态代码块组成
静态类变量显示赋值代码和静态代码块按从上到下的顺序执行
< clinit>()只执行一次 - 实例初始化
实例初始化执行的是< init>()方法
< init>()方法可能重载有多个,有几个构造器就有几个< init>()方法
< init>()方法是有非静态实例类变量显示和赋值代码块和非静态代码块和构造器代码组成
非静态实例类变量显示和赋值代码块和非静态代码块按顺序执行,构造器代码最后执行
每次创建实例,就会调用对应的构造器,就会执行< init>()方法
< init>()方法的首行是有super()或super(实参列表),即对应父类的< init>()方法
super()在子类构造器中写或不写都是存在的
注意:
这里呢就涉及到了一个方法的重写,就是当你创建一个对象的时候,其实非静态方法前面其实有一个默认的this
this 在构造器(或< init>())它表示正在创建的对象,所以它创建的是一个子类的对象,那么它在执行的是子类中的重写的方法。这个是根据对象的多态性
那么,哪些方法不可以重写?
final方法
静态方法
private 等子类中不可见的方法