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 | 详见其他文章 |
分享到:
相关推荐
中间层是指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文件,然后用HTML去调用,不过运行时候需要你的浏览器安装有运行Class的插件。Java源代码实现部分,比较有意思,也具参考性。像坐标控制、旋转矩阵、定时器、生成图像...
2. 编译源文件为类文件(.class 文件) 3. 在虚拟机上运行 三、Java 语言特点 Java 语言有四个主要特点: 1. 简单性:Java 语言简单易学 2. 面向对象:Java 语言是面向对象的编程语言 3. 跨平台性:Java 语言可以...
* 解释字节码成为指令并执行,提供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编写的网页版魔方游戏,编译后生成.class文件,然后用HTML去调用,不过运行时候需要你的浏览器安装有运行Class的插件。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...
1. javac命令是Java编译器,用于将Java源代码编译成.class文件。 2. java命令是Java解释器,用于将.class文件解释成机器代码。 3. Eclipse是Java集成开发环境(IDE),提供了代码编辑、编译、调试等功能。 Java开发...
16. 把Java文件编译成class文件,需要使用javac命令。 二、Java选择题 1. Java之父是James Gosling。 2. Java源文件的扩展名是.java。 3. 下列选项中的标识符符合法的是_a。 4. 在switch(s)语句中,s的数据类型不...
2. JDK、JRE、JVM的作用及关系:JDK是Java程序的开发环境,JRE是Java程序的运行环境,JVM是Java语言跨平台的保证 3. 环境变量配置:path环境变量存放可执行文件的存储位置 二、变量和数据类型 1. 变量的定义和声明...
下面将根据这份摘要文件的主要内容,详细阐述Java编程中的关键知识点。 一、基本语法 1. 注释:Java中的注释分为单行注释(//)、多行注释(/*...*/)和文档注释(/**...*/),其中文档注释用于生成API文档。 2. ...
* 源文件中有多少个类(class),在javac编译之后就会生成多少个字节码文件(.class) 本资源摘要信息涵盖了Java基础知识的三个方面:Java语言概述、面向对象的核心逻辑和Java SE高级应用程序。同时,还涵盖了Java...
5. JVM 加载 class 文件的原理机制 Java 中所有的类必须加装到 JVM 中才能运行,这个工作是由 JVM 中的类装载器完成的,类装载器所作工作实质是把类文件读取到内存当中。 6. STRING 与 STRINGBUFFER 的区别 ...