侧边栏壁纸
博主头像
此昵称不存在 博主等级

行动起来,活在当下

  • 累计撰写 35 篇文章
  • 累计创建 7 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

类的加载顺序(常见面试或笔试题)

Administrator
2023-01-28 / 0 评论 / 0 点赞 / 538 阅读 / 0 字 / 正在检测是否收录...

示例代码

class Father {
    static {
        System.out.println("父类静态代码块");
    }

    {
        System.out.println("父类普通代码块");
    }

    public Father(){
        System.out.println("父类构造方法");
    }
}

public class Son extends Father{
    static {
        System.out.println("子类静态代码块");
    }

    {
        System.out.println("子类普通代码块");
    }

    public Son(){
        System.out.println("子类构造方法");
    }

    public static void main(String[] args) {
        Son son = new Son();
    }
}

运行结果:image-1674892454005

执行顺序:

  1. 父类静态代码块
  2. 子类静态代码块
  3. 父类代码块
  4. 父类构造方法
  5. 子类代码块
  6. 子类构造方法

原因:

  1. 被static修饰的属性和方法,无须创建对象,使用类名可直接调用
  2. static关键字修饰的内容在整个类执行之前会被优先加载 所有最先加载的是父类和子类的静态代码块

总结:

  1. 父类优先于子类
  2. 属性优先于代码块优先于构造方法
  3. 静态优先于非静态
    因此,类加载顺序为:
    父类静态变量->父类静态语句块->子类静态变量->子类静态语句块->父类普通成员变量->父类动态语句块->父类构造器->子类普通成员变量->子类动态语句块->子类构造器
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区