Class文件是JVM虚拟机可以理解的字节码文件,class文件并不是JAVA的专用文件,现在有很多语言都会生成可在JVM上运行的.class文件,比如JRuby,Groovy等等。
这里介绍一下.class文件的具体结构。
Class文件是二进制流,其中包含了一组8为字节为单位的基本单位,其中,各个基本元素之间都是紧密相连的,彼此之间没有空隙。当一个元素的数据大于1个字节的情况,就会按照高位在前的方式为其分配空间,将其放置在若干个字节中。
在Class文件中,只有两种数据类型:无符号数和表。
其中无符号数包括u1,u2,u4,u8,后面的数字代表其所占字节数,比如u4就表示4个字节。无符号数一般可表示数字,索引引用,数量值。或者按照UTF-8编码构成的字符串值。
而表则是由多个无符号数和其他表构成的复合型数据类型(无符号数和表的区别和和java语言中的基础类型与类有点类似),表习惯性的用_info结束。
下面是Class文件格式
类型 | 名称 | 数量 | 简要说明 | u4 | magic | 1 | 魔数,表示该文件是JVM认识的class文件,其值为0xCAFEBABE (可记忆为咖啡宝贝~) | u2 | minor_version | 1 | 次版本号 |
u2 | major_version | 1 | 主版本号 |
u2 | constant_pool_count | 1 | 常量池容量计数值 |
cp_info | constant_pool | constant_pool_count-1 | 详见其他文章 |
u2 | access_flags | 1 | 用于识别一些类或者接口的访问信息,比如,是否是接口,是否public等 |
u2 | this_class | 1 | 类索引 |
u2 | super_class | 1 | 父类索引 |
u2 | interfaces_count | 1 | 接口数量 |
u2 | interfaces | intercaces_count-1 | 接口索引 |
u2 | fields_count | 1 | 字段表数量 |
field_info | fields | fields_count-1 | 详见其他文章 |
u2 | methods_count | 1 | 方法表数量 |
method_info | methods | methods_count-1 | 详见其他文章 |
u2 | attributes_count | 1 | 属性表数量 |
attribute_info | attributes | attributes _count-1 | 详见其他文章 |
分享到:
相关推荐
- `jmap -dump:format=b,file=./<filename>.hprof <pid>`:将Java堆转储为hprof二进制格式到文件。 - `jmap -heap <pid>`:打印Java堆的概要信息,包括GC算法、堆配置等。 例如: ``` jmap 24917 jmap -dump:...
在JVM加载加密class文件时,需要使用特殊的ClassLoader来完成class的解密和Class对象的生成。解密和Class对象的生成是通过C语言和JNI(Java Native Interface)实现的,从而增加了破解的难度。解密步骤中包含了一...
- `-implicit:{none,class}`:指定是否为隐式引用文件生成类文件。 - `-encoding <编码>`:指定源文件使用的字符编码。 - `-source <版本>`:提供与指定版本的源兼容性。 - `-target <版本>`:生成特定 VM 版本...
当应用程序尝试使用某个类时,JVM会查找相应的.class文件。如果这个文件不在当前classpath中,JVM会查找相关的JAR文件,并从中加载所需的类。 - **默认类加载器**:每个Java应用都有一个默认的类加载器,称为系统类...
中间层是指JVM和CLASS文件,它们扮演着非常重要的角色。中间层可以屏蔽底层的复杂细节,让开发者更容易编写程序。同时,中间层也可以提供了跨平台的功能,让开发者可以在不同的操作系统上运行程序。 函数式编程 ...
- **编译与运行**:Java 源代码需要通过 Javac 编译器转化为字节码(.class 文件),然后由 Java 虚拟机(JVM)执行。 - **体育相关应用**:Java 可能被用来编写体育相关的软件,如比赛管理系统、运动员训练模拟器...
* Java 文件的编译命令是 javac,编译后的文件为 class 文件。 * 一个.java 文件中只能有一个公共类,class 文件的文件名和 Java 文件的文件名对应。 * Java 程序可以跨平台,基础是 JVM(Java Virtual Machine)。 ...
本资源摘要信息中,我们将详细介绍 Java 语言的基础知识、Java 开发工具、Java 语言的特点、Java 开发步骤、Java 虚拟机、Java 编译器、Java 字节码文件、Java 解释执行器、Java 虚拟机等。 Java 的基础知识: ...
Java源代码文件经过编译后,会被转换成一系列的`.class`文件,这些文件包含有Java虚拟机可以理解的字节码。不论在哪种系统上产生的`.class`文件,Java虚拟机都能够正确解析和执行。 ##### 3. Java虚拟机 (JVM) Java...
- Java Cryptography Extension(JCE)提供了一个框架和一系列用于加密操作的工具类,支持加密、密钥生成以及消息摘要等操作。 第二部分:Java高级特性 1. 反射 - 反射机制允许在运行时动态访问和修改类和对象的...
2. 编译源文件为类文件(.class 文件) 3. 在虚拟机上运行 三、Java 语言特点 Java 语言有四个主要特点: 1. 简单性:Java 语言简单易学 2. 面向对象:Java 语言是面向对象的编程语言 3. 跨平台性:Java 语言可以...
本文将详细介绍如何使用Jxl API在Java环境中操作Excel文件,包括读取、写入以及格式化的具体实现方法。 #### 关键词 Java;Excel;Jxl API;数据导入导出 ### 引言 Microsoft Office中的Excel是一款非常流行的...
* 解释字节码成为指令并执行,提供Class文件的运行环境 * 进行运行期间垃圾回收 * 提供与硬件交互的平台 Java虚拟机是JAVA运行环境(JRE)的一部分,它提供了一个平台独立的Java运行环境,使得Java程序可以在不同的...
* classpath 环境变量用于指定 Java 类文件(.class 文件)或 jar 文件所在的目录。 * 配置 classpath 环境变量可以使 Java 虚拟机找到所需的类文件。 四、Java 语言的基本语法 * Java 语言的基本语法包括变量声明...
2. Java 语言的字节码文件:Java 语言的字节码文件需要以 .class 为扩展名,该文件可以被 Java 虚拟机执行。 3. Java 语言的多线程机制:Java 语言具有多线程机制,允许程序员创建多个线程来并发执行任务。 本资源...
本资源摘要信息基于 Java 程序设计项目教程(第二版)- 参考答案,涵盖了 Java 语言的基础知识、Java 版本、Java 语言的特点、JVM 的概念和作用、Java 程序的基本结构、异常处理等方面的知识点。 一、Java 版本 ...
4. 编译 Java 应用程序源文件将产生相应的字节码文件,这些字节码文件的扩展名为 .class。 5. 定义一个类,必须使用的关键字是 class。在 Java 中,class 是用于定义类的关键字。 6. JAVA 中不属于基本数据类型的...
gcc -shared -o libmd5.so -I/usr/lib/jvm/java-8-openjdk-amd64/include -I/usr/lib/jvm/java-8-openjdk-amd64/include/linux MD5Util.cpp -lssl -lcrypto ``` 5. **运行Java程序** 现在Java程序可以调用`MD5...
JVM的功能就像是一个软件模拟的计算机,能够安全地兼容不同处理器,并执行.class字节码文件。这种特性使得Java程序具有高度的可移植性。 Java语言的设计基于一套严格的概念和规则。所有的Java实现都依托于JVM,这...