Jvm加载顺序

1 篇文章 0 订阅

面试中经常遇到jvm加载的问题,自己写了个demo记录下

jvm在加载类的时候会先由上而下的加载static中的内容,有父类的会先加载父类中的内容。
static中的内容只加载一次
代码块{}中的内容会在new对象的时候执行,并且会在构造方法前执行,每次new都会执行,同样的有父类的先执行父类的。

以上结论由下面的代码运行结果得知,如有错误欢迎讨论。

public class JVMLoaderBean extends SuperBean{
    public JVMLoaderBean(){
        System.out.println("constructor");
    }
    {
        System.out.println("Block 1");
    }
    static{
        System.out.println("static 1");
    }
    public static JVMLoaderBean bean=new JVMLoaderBean();

    static{
        System.out.println("static 2");
    }
    {
        System.out.println("Block 2");
    }
    public static void main(String[] args){
        System.out.println("main 1");
        JVMLoaderBean bean2=new JVMLoaderBean();

    }
}

public class SuperBean {
    {
        System.out.println("Super block");
    }
    static{
        System.out.println("Super static");
    }
    public SuperBean(){
        System.out.println("Super constructor");
    }
    public void method(){}
}

运行结果
Super static
static 1
Super block
Super constructor
Block 1
Block 2
constructor
static 2
main 1
Super block
Super constructor
Block 1
Block 2
constructor

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java虚拟机(JVM)中,当运行Java应用程序时,JVM会按照特定的顺序加载jar文件。这个加载顺序是由类加载器决定的。类加载器负责加载类文件并将其转化为可执行代码。如果在不同的jar文件或类路径中存在相同的类文件,JVM将按照以下顺序加载jar文件: 1. 启动类路径(bootstrap classpath): 这是JVM加载类文件的最高优先级。它包含了JVM运行所需的核心类库,如Java API类库。启动类路径可以通过"-Xbootclasspath"选项指定。 2. 扩展类路径(extension classpath): 这是JVM加载扩展类库的优先级较低的路径。扩展类库包含了在运行Java应用程序时所需的额外的类库。扩展类路径可以通过"-Djava.ext.dirs"系统属性指定。 3. 应用程序类路径(application classpath): 这是JVM加载应用程序类文件的路径。它是自定义类和jar文件的主要位置。应用程序类路径可以通过"-classpath"选项或者设置CLASSPATH环境变量来指定。 当JVM加载类时,它会按照上述顺序从不同的jar文件中查找所需的类文件。如果在某个jar文件中找到了需要的类文件,JVM加载并使用它。如果在多个jar文件中存在相同的类文件,JVM将按照加载顺序找到的第一个类文件,并将其加载为类对象。 总之,JVM的jar加载顺序是启动类路径、扩展类路径、应用程序类路径。这个顺序确保了JVM可以正确加载并使用所需的类文件,在Java应用程序中提供了灵活的jar文件管理方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值