文章

java - 类加载过程

java - 类加载过程

类加载过程

初始化

  • 一个类要实例化需要先加载并初始化该类
    • main 所在的类需要先加载和初始化
  • 一个子类要初始化需要先初始化父类
  • 一个类初始化就是执行< clinit >() 方法
    • < clinit >() 方法由静态类静态变量显示赋值代码和静态代码块组成
    • 类变量显示赋值代码和静态代码块从上到下顺序执行
    • < clinit >()方法只执行一次

实例初始化

  • 实例初始化就是执行< init >() 方法
  • < init >() 方法可能重载有多个,有几个构造器就有几个< init >()方法
  • < init >() 方法由非静态实例变量显示赋值代码和非静态代码块从上到下顺序执行,而构造器的代码最后执行
  • 每次创建实例对象,调用对应构造器,执行的就是对应< init >()方法
  • < init >方法的首行是 super()或 super(实参列表),即对应父类< init >方法

方法的重写

  • 不可重写的方法
    • final 方法
    • 静态方法
    • private 等子类中不可见方法
  • 非静态方法前面都有个 this,this 在< init > 表示的是正在创建的对象

对象的多态性

  • 子类如果重写了父类的方法,通过子类对象调用的一定是子类重写过的代码
  • 非静态方法默认的调用对象时 this
  • this 堆在在构造器或者说< init >方法中就是正在创建的队形
本文由作者按照 CC BY 4.0 进行授权