`

JVM学习笔记-Class文件(Class File)

 
阅读更多

 

 

What is a Java Class File?

The Java class file is a precisely defined binary file format for Java programs. Each Java class file represents a complete description of one Java class or interface. There is no way to put more than one class or interface into a single class file. The precise definition of the class file format ensures that any Java class file can be loaded and correctly interpreted by any Java Virtual Machine, no matter what system produced the class file or what system hosts the virtual machine.

Java class文件是对Java程序二进制文件格式的精确定义。每一个Javaclass文件都对一个Java类或者Java接口做出了全面描述。一个class文件中只能包含一个类或者接口。无论Java class文件在何种系统上产生,无论虚拟机在何种系统上运行,对Java class文件的精确定义使得所有Java虚拟机都能够正确地读取和解释所有Javaclass文件。

 

Although the class file is related to the Java language architecturally, it is not inextricably linked to the Java language. As shown in Figure 6-1, you could write programs in other languages and compile them to class files, or you could compile your Java programs to a different binary file format. Nevertheless, most Java programmers will likely use the class file as the primary vehicle for delivering their programs to Java Virtual Machines.

尽管class文件与Java语言结构相关,但它并不一定必须与Java语言相关。如图6-1所示,可以使用其他语言来编写程序,然后将其编译为class文件,或者把Java程序编译为另一种不同的二进制文件格式。实际上,Javaclass文件的形式能够表示Java源代码中无法表达的有效程序,然而,绝大多数Java开发者几乎都会选择使用class文件作为程序传给虚拟机的首要方式。

As mentioned in earlier chapters, the Java class file is a binary stream of 8-bit bytes. Data items are stored sequentially in the class file with no padding between adjacent items. The lack of padding helps keep class files compact. Items that occupy more than one byte are split up into several consecutive bytes that appear in big-endian (higher bytes first) order.

如前所述,Java class文件是8位字节的二进制流。数据项按顺序存储在class文件中,相邻的项之间没有任何间隔,这样可以使class文件紧凑。占据多个字节空间的项按照高位在前的顺序分为几个连续的字节存放。

 

Just as your Java classes can contain varying numbers of fields, methods, method parameters, local variables, and so on, the Java class file can contain many items that vary in size or number from one class file to another. In the class file, the size or length of a variable-length item precedes the actual data for the item. This allows class file streams to be parsed from beginning to end, reading in the size of an item first followed by the item data.

和Java的类可以包含多个不同的字段,方法,方法参数,局部变量等一样,Java class文件也能够包含许多不同大小的项。在class文件中,可变长度项的大小和长度位于其实际数据之前。这个特性使得calss文件流可以从头到尾被顺序解析,首先读出项的大小,然后读出项的数据。

What's in a Class File?

The Java class file contains everything a Java Virtual Machine needs to know about one Java class or interface. The remainder of this chapter describes the class file format using tables. Each table has a name and shows an ordered list of items that can appear in a class file. Items appear in the table in the order in which they appear in the class file. Each item has a type, a name, and a count. The type is either a table name or one of the "primitive types" shown in Table 6-1. All values stored in items of type u2, u4, and u8 appear in the class file in big-endian order.

Java class文件中包含了Java虚拟机所知道的,关于类或者接口的所有信息。本章剩余部分将用表格形式描述class文件格式。每个表格都有一个名字,每个表格都显示了在class文件中出现的项的有序列表。这些项按照出现在class文件中的顺序在表中列出。每一项都包括类型、名称及该项的数量。类型或者未表名,或者为如表6-1所示的“基本类型”。所有存储在类型u2,u4和u8项中的值,在class文件中以高位在前的形式出现。

 

Table 6-1. Class file "primitive types"

u1 a single unsigned byte
u2 two unsigned bytes
u4 four unsigned bytes
u8 eight unsigned bytes

The major components of the class file, in their order of appearance in the class file, are shown in Table 6-2. Each of these components is described in more detail below.

可变长度的ClassFile表中的项,如表6-2所示,按照它们在class文件中出现的顺序列出了主要部分。

 

Table 6-2. Format of a ClassFile Table

Type Name Count
u4 magic 1
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
u2 this_class 1
u2 super_class 1
u2 interfaces_count 1
u2 interfaces interfaces_count
u2 fields_count 1
field_info fields fields_count
u2 methods_count 1
method_info methods methods_count
u2 attributes_count 1
attribute_info attributes attributes_count
  • 大小: 67.8 KB
分享到:
评论

相关推荐

    JVM学习笔记(一)

    ### JVM学习笔记(一) #### 一、JVM概述与工具使用 JVM(Java Virtual Machine)是Java语言的核心组成部分之一,它为Java程序提供了一个跨平台的运行环境。本篇学习笔记主要介绍如何利用一系列工具来查看和监控JVM...

    6.1.1.JVM前奏篇笔记1

    ClassFile结构接着包含了一系列的元数据,如访问标志(access_flags)、类索引、父类索引以及接口索引列表等,这些数据定义了类的特性、继承关系以及实现的接口。 类加载机制是JVM的关键组成部分,它负责将类文件从...

    java学习笔记txt版本

    Java程序被编译成字节码(.class文件),可以在安装了Java虚拟机(JVM)的任何平台上运行。这使得Java成为构建企业级应用和服务端应用的理想选择。 #### 二、Java开发环境搭建 - **JAVA_HOME**: 指向JDK的安装路径...

    Java学习笔记

    ### Java学习笔记知识点详解 #### 一、Java环境配置与基本概念 - **系统变量path**: 在设置Java开发环境时,需要配置系统变量`path`,这样计算机才能找到执行Java命令所需的程序。例如,当我们输入`javac`或`java`...

    java se学习笔记

    【Java SE学习笔记】是针对Java初学者的一份详实的学习资源,主要涵盖了Java的基础知识、进阶概念以及编程实践。这份笔记以HTML格式呈现,方便读者在线阅读或下载后离线浏览。以下是对这份笔记可能包含的重要知识点...

    Smali学习笔记

    ### Smali学习笔记 #### 1. Dalvik与Smali ##### 1.1 Dalvik虚拟机概述 Google推出的Dalvik虚拟机(Dalvik Virtual Machine, DVM)首次亮相是在2007年底,随着Android SDK的发布而一同进入公众视线。这款虚拟机是由...

    java学习笔记整理

    ### Java学习笔记整理 #### 1. Java简介 ##### 1.1 计算机编程和开发语言 计算机系统由硬件系统和软件系统组成。软件系统又进一步细分为系统软件和应用软件。其中,系统软件包括操作系统、编译系统、数据库系统等...

    javaSE的学习笔记

    - **编译性语言**:Java 是一种编译型语言,源代码首先被编译成字节码(.class 文件),然后由 JVM 解释执行。 - **强类型语言**:Java 语言具有严格的类型检查机制,能够有效减少运行时错误。 - **开源项目**:Java...

    java学习笔记,好好学习

    - **文件操作**:File类的使用,文件的创建、读写、删除等。 - **对象序列化**:将对象转换为字节流,便于存储或网络传输。 6. **多线程**: - **Thread类**:创建和启动线程的方法。 - **同步机制**:...

    java学习笔记

    ### Java学习笔记精要 #### 一、Java 开发工具 Editplus 配置详解 - **编辑器选择**: 使用 `Editplus` 作为 Java 编程的文本编辑器。 - **与 JDK 的连接配置**: - **javac (编译)**: 参数 `-d.$(FileName)` 表示...

    java学习笔记之大鹏JAVA终级总结

    Java学习笔记之大鹏JAVA终级总结,是针对Java编程语言深入学习和面试准备的一份综合资料。这份总结涵盖了从基础知识到高级概念的多个方面,旨在帮助初学者理解和掌握Java的核心概念,同时解决面试中可能出现的关键...

    Java-J2SE学习笔记.rar

    这份"Java-J2SE学习笔记"包含了丰富的Java基础知识,是初学者和进阶者的重要参考资料。以下将从几个关键知识点进行详细阐述: 1. **Java语言基础**:Java是一种面向对象的编程语言,具有简单性、面向对象、健壮性、...

    java_Java_学习笔记.zip

    - 文件操作:File类用于文件的创建、删除、重命名等。 - 字节流与字符流:InputStream/OutputStream和Reader/Writer家族。 10. **多线程**: - 线程的创建:通过实现Runnable接口或继承Thread类。 - 线程控制:...

    ant学习笔记之(ant执行命令的详细参数和Ant自带的系统属性)

    《Ant学习笔记:详解Ant执行命令参数与系统属性》 Ant,作为一个基于Java的构建工具,因其跨平台性以及XML格式的构建脚本而被广泛应用于自动化构建过程,如编译、打包、测试等。本篇文章将深入探讨Ant执行命令的...

    Java入门学习笔记

    ### Java入门学习笔记 #### 一、Java特点与运行原理 **1.1 Java特点** - **简单性:** Java的设计使得它易于学习且避免了许多传统编程语言中存在的复杂性。 - **面向对象:** Java是一种纯面向对象的语言,支持...

    CoreJava学习笔记.doc

    《CoreJava学习笔记》 Java,作为一种广泛使用的高级编程语言,以其独特的特性和优势深受开发者喜爱。本学习笔记旨在深入浅出地介绍Java的核心概念,帮助初学者快速掌握这一强大的工具。 1. Java特点 Java语法...

    Java学习超强笔记

    以上只是Java学习笔记中可能涉及的部分知识点,实际上,完整的笔记还会包含更深入的Java特性,如注解、模块系统、JDBC数据库访问、Spring框架等内容,以及实际项目开发中的最佳实践。这份笔记是初级Java程序员系统...

    java面试题 学习笔记

    Java面试题及学习笔记概述 Java作为一种广泛应用的编程语言,其面试题库广泛且深入,涵盖了从基础语法到高级特性的各个层面。本篇将基于常见的Java面试问题,结合学习笔记,深入探讨Java的核心概念和技术。 一、...

    java私塾学习笔记整理

    ### Java私塾学习笔记整理 #### 第一章:Java入门 **一、Java是什么?** Java是一种广泛使用的高级编程语言,由Sun Microsystems于1995年推出。它旨在为跨平台开发提供一种通用的语言环境,使开发者能够在任何...

Global site tag (gtag.js) - Google Analytics