Java运行时一个类是什么时候被加载的?

2023-11-15

A question a day ,get offer every day.

-- 未来的魔法师

       一个类在什么时候开始被加载,《Java虚拟机规范》中并没有进行强制约束,交给了虚拟机自己去自由实现。HotSpot虚拟机是按需加载,在需要用到该类的时候加载这个类。工程首先加载rt目录下的java基础类库,然后加载主程序类,然后用到什么类加载什么类。

       创建Demo01为主类、Person为被调用类,执行main()方法,实例化Person类,并调用person类中的working()方法。具体实现如下代码:

public class Demo01 {  
    //常量  
    public static final int a =123;  
    //类变量  
    public static int b = 321;  
    //实例变量  
    public int abc;  
    // -XX:+TraceClassLoading   监控类的加载  
    public static void main(String[] args){  
        Person person = new Person();  
        person.working();   
    }  
}  
  
@Data  
public class Person {  
    private int id;  
  
    //测试  
    public void working(){  
  
    }  
}  

       结果日志打印内容如下所示:

  1. 首先加载jre rt文件下的rt依赖包
  2. 加载主程序类  
  3. 加载被调用的person类  
[Opened C:\Program Files\Java\jdk1.8.0_241\jre\lib\rt.jar]  
//java核心类  
[Loaded java.lang.Object from C:\Program Files\Java\jdk1.8.0_241\jre\lib\rt.jar]  
[Loaded java.io.Serializable from C:\Program Files\Java\jdk1.8.0_241\jre\lib\rt.jar]  
[Loaded java.lang.Comparable from C:\Program Files\Java\jdk1.8.0_241\jre\lib\rt.jar]  
[Loaded java.lang.CharSequence from C:\Program Files\Java\jdk1.8.0_241\jre\lib\rt.jar]  
[Loaded java.lang.String from C:\Program Files\Java\jdk1.8.0_241\jre\lib\rt.jar]  
[Loaded java.lang.reflect.AnnotatedElement from C:\Program Files\Java\jdk1.8.0_241\jre\lib\rt.jar]  
//省略  
..............  
.............  
.............  
//加载编译后的程序class类  
//加载主程序类  
[Loaded Demo01 from file:/C:/code/java/java-tutorial/tutorials-in-java/interview-question/target/classes/]  
[Loaded sun.launcher.LauncherHelper$FXHelper from C:\Program Files\Java\jdk1.8.0_241\jre\lib\rt.jar]  
[Loaded java.net.URI from C:\Program Files\Java\jdk1.8.0_241\jre\lib\rt.jar]  
[Loaded java.lang.Class$MethodArray from C:\Program Files\Java\jdk1.8.0_241\jre\lib\rt.jar]  
[Loaded java.lang.Void from C:\Program Files\Java\jdk1.8.0_241\jre\lib\rt.jar]  
[Loaded java.net.URI$Parser from C:\Program Files\Java\jdk1.8.0_241\jre\lib\rt.jar]  
[Loaded sun.net.spi.DefaultProxySelector$NonProxyInfo from C:\Program Files\Java\jdk1.8.0_241\jre\lib\rt.jar]  
//加载被调用的person类  
[Loaded Person from file:/C:/code/java/java-tutorial/tutorials-in-java/interview-question/target/classes/]  

//补充:maven项目中导入的依赖如redis并未使用,不会被加载  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java运行时一个类是什么时候被加载的? 的相关文章

随机推荐

  • OpenMMLab MMDetectionV3.1.0-SAM(环境安装、模型测试、训练以及模型后处理工具)

    OpenMMLab Playground 概况 当前通用目标检测的研究方向正在朝着大型多模态模型发展 除了图像输入之外 最近的研究成果还结合了文本模式来提高性能 添加文本模态后 通用检测算法的一些非常好的属性开始出现 例如 可以利用大量易于
  • UE4 自定义鼠标样式

    主要内容 在项目制作中我们往往不会使用默认的鼠标样式 这时就需要自定义鼠标样式 具体实现步骤就是创建一个带有图片的UI蓝图然后在项目设置里的UserInterface里进行设置 实现步骤 1 新建UI蓝图 添加一个Image控件把锚点设置成
  • 电容降压主要是用在直流稳压电源电路里

    https www cnblogs com jarvise p 4647029 html 基本原理 电容降压主要是用在直流稳压电源电路里 直流稳压电源电路的大致结构是 市电 变压 降压 整流 滤波 稳压 直流输出 变压 主要是降压 一般使用
  • 非线性微分跟踪器

    微分器描述 离散形式的非线性微分跟踪为 其中 h为采样周期 v k 为第k时刻的输入信号 为决定跟踪快慢的系数 fst 为最速控制综合函数 描述如下 仿真分析 微分器测试 输入信号v t sin2pit 采样周期h 0 001 150 扰动
  • 高性能本地存储设计

    本地存储常规架构 通用的云本地存储常规架构如下图所示 以MySQL数据库为例 它通过POSIX API与云主机内核交互 云主机内核包括一个标准文件系统和标准的块设备接口 云主机内核下面是云物理机内核 它自上而下由标准文件系统 标准块设备接口
  • STL之list(二)

    默认allocator为alloc 其具体使用版本请参照
  • HTML画布与SVG(Canvas vs. SVG)

    目录 画布 Canvas 什么是 Canvas 创建 Canvas 元素 通过 JavaScript 来绘制 理解坐标 更多 Canvas 实例 实例 线条 实例 圆形 实例 渐变 实例 图像 相关页面 SVG Scalable Vecto
  • 信号量的基本概念总结

    以下内容是摘抄博客 https blog csdn net fern girl article details 61197995 信号量的基本概念 一 首先 我们要知道信号量是什么 信号量的本质是数据操作锁 它本身不具有数据交换的功能 而是
  • FileSystemObject组件新建/读取/添加/修改/删除功能实例

  • MAC快捷键对照表

    Mac 键盘符号说明 Command Shift Caps Lock Option Control Return Enter Delete 向前删除键 Fn Delete 上箭头 下箭头 左箭头 右箭头 Page Up Fn Page Do
  • matlab kl散度,基于KL散度的面向对象遥感变化检测

    3 2 实验过程与结果 3 2 1 面向对象的遥感影像分割 利用ENVI软件的Segment Only Feature Extraction功能模块对实验数据进行面向对象分割操作 该方法采用的是Full Lambda Schedule分割算
  • 多益2018春招前端技术面试

    2018春招 多益网络内推 前端开发工程师 技术面问题 据我了解 从一月到三月份年 多益一共启动了至少三批春招招聘 从同学的反馈来看 一月份考验刚结束的那批春招通过率比较高 至于我个人 参加的是三月份上中旬的春招内推 可惜并没有通过 总体上
  • 虚拟机克隆后无法连接网络

    本文章转载自 Linux 无线图标莫名消失的解决方法 xin1889的博客 CSDN博客 今天我的也是的觉得再弄个虚拟机麻烦 索性就直接克隆了 然后连不上网 就连接原来的可以 连接百度也可以 但是唯独ping自己不行 然后不知道怎么回事 同
  • 智能指针和函数模板

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
  • c++学习笔记-#pragma once

    pragma 预处理宏的一般格式 pragma one one是参数 1 pragma message message 当编译器遇到这条指令时 它会在编译输出窗口中将message打印出来 常用于宏条件条件判断中使用 这样就知道自己的宏条件
  • 串口通信知识点总结

    串口通信小试牛刀 一 串口协议和RS 232标准 一 串口通讯协议 1 简介 2 串口通信的基本原理 二 RS232串口标准 1 简介 2 RS232串行接口的特点 3 RS232串行接口的电气特性 二 RS232电平与TTL电平 一 TT
  • Pytorch中多GPU并行计算教程

    如果不想看文字的 可以在我bilibili上看录制的视频教程 Pytorch多GPU使用教程 本教程所涉及的代码可自行在我的github上下载 https github com WZMIAOMIAO deep learning for im
  • layui添加菜单和动态操作tab

    layui添加菜单和动态操作tab 代码一 使用模板引擎渲染菜单 代码二修改版 代码一 使用模板引擎渲染菜单
  • JQ奇偶选择

    table tr even click function console log 选择奇数行 表示获取一个table 所有的索引为偶数的行 其中索引index 从0开始算起 0算偶数 table tr odd click function
  • Java运行时一个类是什么时候被加载的?

    A question a day get offer every day 未来的魔法师 一个类在什么时候开始被加载 Java虚拟机规范 中并没有进行强制约束 交给了虚拟机自己去自由实现 HotSpot虚拟机是按需加载 在需要用到该类的时候加