源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

实例解析JAVA中代码的加载顺序

  • 时间:2022-05-22 15:38 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:实例解析JAVA中代码的加载顺序
[b]Java中代码的加载顺序所能了解的知识点[/b] 类的依赖关系 static代码块的加载时间 继承类中构造器的隐式调用 非static的成员变量初始化时间 main方法和static的加载顺序 [b]测试代码如下:[/b]
public class App {
  private static App d = new App();
  private SubClass t = new SubClass();

  static{
    System.out.println("App static");//6
  }

  public App(){
    System.out.println("构建App");//5
  }

  public static void main(String[] args) {
    System.out.println("App main");//7
  }
}
//父类
class SuperClass{
  static{
    System.out.println("SuperClass static");//1
  }
  SuperClass(){
    System.out.println("构建SuperClass");//3
  }
}
//子类
class SubClass extends SuperClass{
  static{
    System.out.println("SubClass static");//2
  }
  public SubClass(){
    //super()
    System.out.println("构建SubClass");//4
  }
}
[b]输出结果[/b]
SuperClass static
SubClass static
构建SuperClass
构建SubClass
构建App
App static
App main
[b]分析[/b] 因为在App类中,声明了SubClass的变量,所以JVM先加载SubClass类,不然无法编译App。 SubClass是SuperClass的子类,在继承关系的类中,父类先加载进JVM,不然子类无法编译。 在类中static代码会在字节码文件加载进JVM的时候调用一次,且在该类的生命周期中只会调用一次。所以在第一行输出的是SuperClass static,随后SubClass加载进了JVM,输出第二行的SubClass static 声明的static成员变量,其初始化是在static代码块中。非static成员变量,其初始化是在构造器中,且是在构造器的代码前面。 [img]http://files.jb51.net/file_images/article/201704/201704200842271.png[/img] 创建静态的成员变量d之前会先创建成员变量t,在SubClass的构造器中会隐式的使用super()调父类的构造器,所以第三行输出构建SuperClass,第四行输出[code]SubClass。[/code] 在App的构造器中创建好了成员变量t后,向下执行,输出第五行的[code]构建App[/code]。 随后继续执行App的静态代码块(因为d是static的变量,所以并不是说App的构造器比static先执行),输出第六行的[code]App static[/code]。 最后执行public类的入口方法main,输出第七行的[code]App main[/code]。 希望本篇文章对您有所帮助
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部