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

发布时间 - 2026-01-11 00:44:22    点击率:

Java中代码的加载顺序所能了解的知识点

类的依赖关系

static代码块的加载时间

继承类中构造器的隐式调用

非static的成员变量初始化时间

main方法和static的加载顺序

测试代码如下:

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
  }
}

输出结果

SuperClass static
SubClass static
构建SuperClass
构建SubClass
构建App
App static
App main

分析

因为在App类中,声明了SubClass的变量,所以JVM先加载SubClass类,不然无法编译App。

SubClass是SuperClass的子类,在继承关系的类中,父类先加载进JVM,不然子类无法编译。

在类中static代码会在字节码文件加载进JVM的时候调用一次,且在该类的生命周期中只会调用一次。所以在第一行输出的是SuperClass static,随后SubClass加载进了JVM,输出第二行的SubClass static

声明的static成员变量,其初始化是在static代码块中。非static成员变量,其初始化是在构造器中,且是在构造器的代码前面。

创建静态的成员变量d之前会先创建成员变量t,在SubClass的构造器中会隐式的使用super()调父类的构造器,所以第三行输出构建SuperClass,第四行输出SubClass。

在App的构造器中创建好了成员变量t后,向下执行,输出第五行的构建App

随后继续执行App的静态代码块(因为d是static的变量,所以并不是说App的构造器比static先执行),输出第六行的App static

最后执行public类的入口方法main,输出第七行的App main

希望本篇文章对您有所帮助


# JAVA中代码的加载顺序实例  # JAVA代码加载顺序  # 详解Spring Boot 配置加载顺序及属性加载顺序  # Java代码块与代码加载顺序原理详解  # Java中类的加载顺序剖析(常用于面试题)  # java 如何查看jar包加载顺序  # 加载  # 是在  # 子类  # 类中  # 器中  # 行输出  # 的是  # 好了  # 隐式  # 会在  # 进了  # 只会  # 是说  # 所能  # 对您  # 会先  # brush  # class  # java  # public 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Java解压缩zip - 解压缩多个文件或文件夹实例  如何用花生壳三步快速搭建专属网站?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  Laravel如何创建自定义Facades?(详细步骤)  如何用免费手机建站系统零基础打造专业网站?  如何用PHP工具快速搭建高效网站?  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  深圳网站制作培训,深圳哪些招聘网站比较好?  如何在万网ECS上快速搭建专属网站?  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  Laravel Fortify是什么,和Jetstream有什么关系  如何用景安虚拟主机手机版绑定域名建站?  网站制作免费,什么网站能看正片电影?  Laravel如何使用Vite进行前端资源打包?(配置示例)  微信小程序 require机制详解及实例代码  JavaScript如何实现类型判断_typeof和instanceof有什么区别  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  linux top下的 minerd 木马清除方法  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  原生JS获取元素集合的子元素宽度实例  利用vue写todolist单页应用  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  如何快速搭建支持数据库操作的智能建站平台?  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  详解Android图表 MPAndroidChart折线图  高防服务器:AI智能防御DDoS攻击与数据安全保障  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  如何快速搭建FTP站点实现文件共享?  香港服务器如何优化才能显著提升网站加载速度?  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  如何确保西部建站助手FTP传输的安全性?  使用C语言编写圣诞表白程序  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  ,怎么在广州志愿者网站注册?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  Bootstrap CSS布局之列表  如何用腾讯建站主机快速创建免费网站?  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  Laravel如何处理CORS跨域请求?(配置示例)  如何为不同团队 ID 动态生成多个“认领值班”按钮  浅谈Javascript中的Label语句  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决