首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • Java文件结构

    文件结构public class TestClass {private int m;public int inc() {return m + 1; }}1.魔数 每个Class文件的头四个字节被称为 TestClass.java"4.访问标志 在常量池之后就是2个字节代表访问标志 access_flags。 这里就是之前上大学看到反编译代码的时候根本看不懂的东西,终于懂了哈哈哈7.方法表集合略8.属性表集合多到可以再列一章略。 又印证了java会给每一个隐式定义一个构造方法。 而我的方法明明没有参数,为什么又有Arg_size=1呢? Java语言的潜规则:在任实例方法中,都可以通过this访问到方法所属的对象——哈哈哈哈,我猜大家平时在写代码的时候在方法内引用当前的属性都不会显式的把this.给写出来,而是直接拿属性了。

    43000编辑于 2024-12-23
  • 来自专栏爱撸猫的杰

    Java文件结构

     Class文件是以8位字节为基础单位的二进制流,各部分中间没有分隔符。遇到8位字节以上的空间数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储。     Class文件采用类似C语言的伪结构体来存储,这种伪结构体只有两种数据类型:无符号数和表。无符号数以u1,u2,u4,u8四种,数字代表字节数。 表用于描述有层次关系的复合结构数据,整个Class文件本质上就是一张表。 2.接口的访问信息 索引、父索引 和接口索引集合 存储、父、接口的 文件索引 字段表集合 1.字段作用域 2.是否static 3.可变性 4.并发可见性 5.可否被序列化 6.字段数据类型 7 因为Java不支持多重继承,所以父索引只有一个,除了java.lang.Object外,所有Java都有父,因此除了java.lang.Object,所有java的父索引都不为0。

    90430发布于 2019-03-28
  • 来自专栏指点的专栏

    Java 机制(3)---- 文件结构

    在这篇文章中我们来一起看一下 class 文件结构,来进一步加深我们对虚拟机的加载机制和机制的理解。本文参考了 《深入理解 Java 虚拟机》一书。 解析 .class 文件 ​ 我们都知道一个 Java (.java文件在被 Java 编译器(javac) 编译过后,如果语法没有错误,则会生成一个对应的 .class 文件,这个 .class 文件是一个二进制文件,用一定的格式保存了我们书写的的所有信息。 除了 ConstantValue 以外,Java 虚拟机还有很多其他类型的属性表,最常见的便是 Code 表,它的结构我们在分析文件中的方法属性时会介绍,如果虚拟机在进行属性表解析时发现属性表名不是其可以识别 其实 验证过程是最复杂的,因为这个过程需要扫描整个在加载过程中得到得到的 .class 文件格式的二进制数据,也就是相当于将我们在上面模拟的解析 .class 文件的过程,并且判断相关的数据是否合法,比如文件的魔数是否为

    89920发布于 2019-07-01
  • 来自专栏一个会写诗的程序员的博客

    Java核心技术》 Class文件结构开篇Class文件结构

    ,但是无法运行以后版本的Class文件,即使文件格式并未发生变化 如果使用JDK1.5运行使用JDK1.6编译的Class文件,会报: java.lang.UnsupportedClassVersionError : Bad version number in .class file 就是由于JDK1.6编译的文件版本号超过了JDK1.5虚拟机所接受的范围 Java class文件二进制文件。 Class文件结构 class文件结构 简单讲,jvm的class文件是针对jvm的私家定制。只要运行在jvm上byte code,都需要按照class文件format来。否则jvm解析不了。 官网文档: The Java Virtual Machine class file format class文件java虚拟机执行引擎的数据入口,也是java技术体系的基础支柱之一,了解class文件结构对后面进一步了解虚拟机执行引擎有很重要的意义 class文件是一组以八位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在class文件中,中间没有添加任何分隔符,这使得整个class文件中存储的内容几乎全部都是程序运行的必要数据,没有空隙存在

    79830发布于 2018-08-20
  • 来自专栏JokerDJ

    Java解析eml文件工具

    .*; import java.io.*; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util .*; /** * 使用Java的mail包解析 标准的 .eml格式的邮件文件 * * @author * @date 2019/08/07 */ public class EmlUtil HashMap<>(); parserFile(file.getAbsolutePath()); return result; } /** * 解析文件 * * @param emlPath 文件路径 */ public Map<Object, Object> parserFile(String emlPath) map.put("type", msg.getContentType()); } return map; } /** * 解析内容

    80010编辑于 2023-11-27
  • 来自专栏老付的网络博客

    手写Java解析器-01.class文件的基本结构

    java的运行过程 在运行一段java代码的时候需要经过编译,验证,加载和运行,具体如下图: ? 这个系列的文章是为了探讨Java字节码是什么样的结构,如何能够准确的表达我们代码的含义。 ---- JDK中如何解析class文件 在原生的JDK中有对java字节码的读取的工具com.sun.tools,具体使用如下: File file=new File("/Users/fuwei/work class文件的基本结构 根据JVM的虚拟机规范(SE8)提供的资料,字节码对应的结构体如下: ClassFile { u4 magic; u2 在我们了解了class的结构之后,就可以开始试着解析class文件解析过程 读取文件 private DataInputStream dataInputStream; public ClassReadCursor(String filePath) {

    80630发布于 2020-04-16
  • 来自专栏明明如月的技术专栏

    使用Java Scanner解析CSV文件

    本文将为你介绍如果使用Java的Scanner来读取或者解析CSV文件。 我的CSV文件(user.csv)内容如下 Rockey,22,India Bill,23,US Sonia,23,Germany 接下来我们首先从创建映射上述属性的实体User.java public ,本例中我们采用文件的方式。 CSVParsingExample.java import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class CSVParsingExample { public static void

    1.6K20发布于 2021-08-27
  • 来自专栏指点的专栏

    Java 集合框架(7)---- Set 相关解析

    前言 在上篇文章中,我们将剩下的常见的 Map 接口下的相关具体做了一个解析,还有一些相关的将会在下一篇文章中做一个总结,这篇我们来看看 Set 接口的相关。 关于 HashMap 的运行机制,可以参考之前的文章:Java 集合框架(5)---- Map 相关解析(中) TreeSet 这个可以使得添加进入 Set 集合中的元素按照某种规则来排序,但是其并不是直接实现 关于 TreeMap 可以参考:Java 集合框架(5)---- Map 相关解析(中) 。 关于其运行元素可以参考 Java 集合框架(6)---- Map 相关解析(下) 。 在下一篇文章中我们将一起对整个 Java 集合框架做一个总结,也算是深入 Java 集合框架的系列的一个结束篇吧。

    67330发布于 2019-01-18
  • 来自专栏开源心路

    文件结构

    Java虚拟机不和包括Java在内任何语言绑定,它只与Class文件这种特定的二进制文件格式所关联,Class文件中包含了Java虚拟机指令集和符号表以及若干其他辅助信息。 二.Class文件结构 根据Java虚拟机规范,文件由单个ClassFile结构组成: ClassFile{ u4 magic; //Class 文件的标志 u2 [attributes_count];//属性表集合 } 根据Java虚拟机规范规定,Class文件格式采用一种类似C语言结构体的伪结构来存储数据,这种伪结构中只有两种数据类型:无符号和表 无符号数属于基本的数据类型 第5和第6个字节是次版本号,第7和第8字节是主版本号(0x0034为52,对应JDK版本1.8)Java的版本号是从45开始的,JDK1.1之后的每一个JDK大版本发布主版本号向上加1,高版本的JDK能向下兼容低版本的 当虚拟机运行时,需要从常量池获得对应的符号引用,再在创建或运行时解析并翻译到具体的内存地址中。

    51010编辑于 2023-06-30
  • 来自专栏做不甩锅的后端

    java的class文件字节码解析

    我们可以查看上述字节码的二进制文件用16进制查看: ? 主版本号(major version):.class 文件的第 7 - 8个字节,即编译生成该 .class 文件的 JDK 主版本号。 字节码的二进制文件对应表示为: CA FE BA BE 00 00 00 34 那么前面的cafebabe就是魔数,而0000 和0034则分别是主版本号和次版本号。 、父索引和接口索引集合 在class文件中,将用这三项来标识的继承关系。 这个类属性值表示的内容为: SourceFile: "HelloByteCode.java" 至此,我们完整解析了class的字节码。

    1.2K20发布于 2021-08-06
  • 来自专栏每天学Java

    Class文件结构

    “ 我们都知道Java虚拟机不和包括Java在的任何语言绑定,它只与Class文件这种特定的二进制文件格式所关联。而Class文件是由java文件经过javac编译器编译后生成的。” ? 01 — Class文件结构 在深入理解Java虚拟机一书中是先介绍概念然后具体分析,这里我就反过来描述,我们先看一下class文件,这里我打开一个本地被编译过的class文件,我们看到它是乱码的。 当虚拟机运行时,需要从常量池获得对应的符号引用,再在创建时或运行时解析并翻译到具体的内存地址之中。 Class文件是一组以8字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑排列在class文件中,中间没有任何分隔符,这使得class文件中存储的内容几乎全部是程序运行的必要程序。 Java虚拟机规范规定,Class文件格式采用类似C语言结构体的伪结构来存储数据,这种结构只有两种数据类型:无符号数和表

    1.2K20发布于 2020-06-02
  • 来自专栏IT可乐

    Java虚拟机详解(九)------文件结构

    而 class 文件便是一组以 8 位字节为基础单位流的二进制流,各个数据项目严格按照顺序紧凑地排列在 class 文件之中,中间没有添加任何分隔符,所以整个class 文件中存储的内容几乎都是程序运行的必要数据 4、魔数   每个 class 文件的头 4 个字节称为魔数(Magic Number),它的唯一作用是:标识该文件是一个Java文件。 如果没有识别到该标志,则说明该文件不是Java文件或者文件已受损。   由上图,我们可以看到前 4 个字节是 cafe babe。 当虚拟机运行时,需要从常量池获得对应的符号引用,再在创建时或运行时解析并翻译到具体的内存地址之中。关于的创建和动态连接的内容,下篇博客会详细介绍。    7、访问标志   常量池结束后的两个字节表示访问标志(access_flags),这个标识用于识别一些或接口层次的访问信息。   

    83220发布于 2019-11-13
  • 来自专栏Java架构师必看

    Class 文件结构

    Java虚拟机不和特定的语言绑定,它只与 “Class文件” 这种特定的二进制文件格式所关联。Class文件中包含了 Java虚拟机指令集和符号表以及若干其他辅助信息。 Class 文件结构 ---- Class 文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在 Class文件之中,中间没有任何分隔符,这使得整个 Class文件中存储的内容几乎全部是程序运行的必要数据 Java虚拟机规范中规定,Class文件格式采用一种类似于C语言结构体的伪结构来存储数据,这种伪结构中只有两种数据类型:无符号数和表,后面的解析都要以这两种数据类型为基础,所以这里先介绍这两个概念。 根据 Java 虚拟机规范,文件由单个 ClassFile 结构组成: ClassFile { u4 magic; //Class 文件的标志 u2 第7和第8个字节是主版本号(major Version)。

    1.1K20发布于 2021-05-14
  • 来自专栏源码之路

    Class文件结构(2)——用java代码实现解析Class文件

    本文,我们编写JAVA程序来解析class文件,读者注意,阅读本文前先详细了解Class文件结构,可参考笔者前一篇文章:Class文件结构(1)—手动解析每一个字节,你看不懂 代码地址:https 在实现常量池解析器之前,我们需要先根据《Java虚拟机规范》中描述的每个常量结构创建对应的Java类型。 在创建完各常量结构对应的Java,和实现各常量结构解析方法后,我们再来完成整个常量池的解析工作。 方法包括静态方法、以及的初始化方法<clinit>和的实例初始化方法<init>。参照《Java虚拟机规范》,方法结构如表 ? 了解Class文件结构是学习Java虚拟机字节码指令的前提条件。 下一篇我们正式学习字节码指令!

    3.7K10发布于 2021-02-05
  • 来自专栏喵叔's 专栏

    Dockerfile 解析--文件结构

    通过 Dockerfile 开发人员可以快速创建自定义镜像,这篇文章就为大家来介绍一下 Dockerfile的文件结构 Dockerfile 内容包含四部分: 基础镜像信息 维护者信息 镜像操作指令 容器启动时执行的指令 下面我们通过一个 Dockerfile 文件来具体讲解一下: # 这个 Dockerfile 是基于 ubuntu:xeniel 镜像来创建容器 FROM ubuntu:xeniel nginx RUN echo "\ndaemi off;">>/etc/nginx/nginx.conf CMD /usr/sbin/nginx 第一行通过注释的方式描述了这个 Dockerfile 文件是基于

    71210发布于 2020-09-08
  • 来自专栏Android 研究

    Retrofit解析7之相关解析

    所以我们总结一下,就是一个JSON解析的转化器 (二)"com.squareup.retrofit2:converter-gson:2.1.0"的包结构 如下图: ? 包结构.png 我们发现好简单,就3个耶,那我们就一个一个来看 先看下GsonConverterFactory (三) 源码解析 1、GsonConverterFactory 源码解析 这个注释已经讲解过了 GsonConverterFactory结构.png 通过代码和结构图,我们知道以下几点 构造函数是private,所以不能直接new,但是他提供了两个public的静态方法来创面一个GsonConverterFactory 这样,解析响应体(ResponseBody)和解析请求体(RequestBody)就进一步解耦了。 上传,如果是文件上传,则设置类型。

    3.3K10发布于 2018-08-30
  • 来自专栏程序员Gank

    深入理解Java虚拟机 | 文件结构

    如果你也和我一样,不了解结构加载,但是工作中又涉及到字节码相关内容,相信后面两篇文章会对你有所帮助。 我们所编写的每一行代码,要在机器上运行最终都需要编译成二进制的机器码 CPU 才能识别。 它们和 Java 语言一样都会被编译器编译成字节码文件,然后由虚拟机来执行。所以说文件(字节码文件)具有语言无关性。 二. Class 文件结构 Class 文件是一组以 8 位字节为基础单位的二进制流,各个数据严格按照顺序紧凑的排列在 Class 文件中,中间无任何分隔符,这使得整个 Class 文件中存储的内容几乎全部都是程序运行的必要数据 Java 虚拟机规范规定 Class 文件格式采用一种类似与 C 语言结构体的微结构体来存储数据,这种伪结构体中只有两种数据类型:无符号数和表。 建议想要深入了解的同学可以自己动手将 Java 编译成二进制字节码文件,根据文章里介绍的文件结构逐个字符去对照和实验,有助于加深理解。

    46440发布于 2019-07-31
  • 来自专栏BaronTalk

    深入理解Java虚拟机(文件结构

    如果你也和我一样,不了解结构加载,但是工作中又涉及到字节码相关内容,相信后面两篇文章会对你有所帮助。 我们所编写的每一行代码,要在机器上运行最终都需要编译成二进制的机器码 CPU 才能识别。 Class 文件结构 Class 文件是一组以 8 位字节为基础单位的二进制流,各个数据严格按照顺序紧凑的排列在 Class 文件中,中间无任何分隔符,这使得整个 Class 文件中存储的内容几乎全部都是程序运行的必要数据 Java 虚拟机规范规定 Class 文件格式采用一种类似与 C 语言结构体的微结构体来存储数据,这种伪结构体中只有两种数据类型:无符号数和表。 建议想要深入了解的同学可以自己动手将 Java 编译成二进制字节码文件,根据文章里介绍的文件结构逐个字符去对照和实验,有助于加深理解。 关于「文件结构」我们就介绍到这里,下一篇我们来聊聊「虚拟机的加载机制」。 参考资料: 《深入理解 Java 虚拟机:JVM 高级特性与最佳实践(第 2 版)》 ----

    58510发布于 2019-07-31
  • 深入理解Java虚拟机--文件结构

    Java虚拟机不和包括Java在内的任何语言绑定,它只与“Class文件”这种特定的二进制文件格式所关联,Class文件中包含了Java虚拟机指令集和符号表以及若干其他辅助信息。 任一门功能性语言都可以表示为一个能被Java虚拟机所接受的有效的Class文件,所以虚拟机并不关系Class的来源是何种语言2.Class文件结构任何一个Class文件都对应着唯一一个或接口的定义信息 Class文件说一组以8位字节为基础单位的二进制流,各个数据项目严格的按照顺序紧凑地排列在Class文件中,中间没有任何分隔符,所以Class文件中存储的内容几乎都是程序运行的必要数据,没有空隙存在当遇到需要占用 8位字节以上空间的数据项时,则会按照高位在前的放松分割成若干个8位字节进行存储Class文件格式采用一种类似于V语言结构体的伪结构体存储数据,伪结构中只有两周数据类型:无符号数、表无符号数属于基本数据类型 当虚拟机运行时,,需要从常量池获得对应的符号引用,再在创建时或运行时解析、翻译到具体的内存地址之中。

    17600编辑于 2025-07-15
  • 来自专栏Java学习专栏博客

    JVM-文件结构

    文件结构JVM 的“无关性” 谈论 JVM 的无关性,主要有以下两个:平台无关性:任何操作系统都能运行 Java 代码语言无关性: JVM 能运行除 Java 以外的其他代码Java 源代码首先需要使用 Class 文件结构 Class 文件二进制文件,它的内容具有严格的规范,文件中没有任何空格,全都是连续的 0/1。Class 文件 中的所有内容被分为两种类型:无符号数、表。 版本信息紧接着魔数的 4 个字节是版本信息,5-6 字节表示次版本号,7-8 字节表示主版本号,它们表示当前 Class 文件中使用的是哪个版本的 JDK。 CONSTANT_Float_info4浮点型字面量CONSTANT_Long_info5长整型字面量CONSTANT_Double_info6双精度浮点型字面量CONSTANT_Class_info7或接口的符号引用 由于 Java 不允许多重继承,所以父索引只有一个,除了 java.lang.Object 之外,所有的 Java 都有父,因此除了 java.lang.Object 外,所有 Java 的父索引都不为

    37820编辑于 2023-07-19
领券