<!----><!----><!---->
<!----><!----><!---->
<!---->1)
<!---->Fields_count
和
fields
紧接着
interfaces
后面的是对该类或者接口中所生命的字段的描述。首先是计数
fields_count
,它是类变量和实例变量的字段的数量总和。在这个计数后面有相应数目个
field_info
表。此表包含了字段的名字、描述符和修饰符。如果该字段被声明为
final
,
field_info
还会展示其常量值。
<!----><!---->
<!---->
图
2
:
field_info
表的格式
自上而下分别为:访问标志,简单名称(非全限定名),字段描述符,属性。字段描述符即该字段的型别。
<!---->2)
Methods_count
和
methods
<!---->
方法表与方法表计数。方法表的格式与
field_info
类似,区别在于其描述的是方法。故不再赘述。
<!---->3)
Attributes_count
和
attributes
<!---->
Java
虚拟机实现定义了两种属性
----SourceCode
和
InnerClasses
,它们出现在
ClassFile
表中的属性列表中。
Class
的生命周期
Java
虚拟机通过装载、连接和初始化一个
java
类型,使该类型可以被正在运行的
java
程序所使用。其中,装载就是把二进制形式的
java
类型读入
java
虚拟机中;而连接就是把这种已经读入虚拟机的二进制形式的类型数据合并到虚拟机的运行时状态中。连接阶段分为三个子步骤
-----
验证、准备、解析。“验证”确保了
java
类型数据格式正确并且适于
java
虚拟机的使用。而“准备”步骤则负责为该类型分配它所需的内存,比如为它的类变量分配内存。“解析”步骤则负责把常量池中的符号引用转换为直接引用。
<!----><!---->
<!---->
图
3
:类型生命周期的开始
装载
要装载一个类型,
java
虚拟机必须:
<!---->l
<!---->通过该类型的完全限定名,产生一个代表该类型的二进制数据流
<!---->l
<!---->解析这个二进制数据流为方法去内的内部数据结构
<!---->l
<!---->创建一个俄表示该类型的
java.lang.Class
类的实例
装载步骤的最终产品就是一个
java.lang.Class
的实例对象,而这个对象就是该类型在虚拟机中的“注册”,要访问该类型的信息,程序就要调用该类型对应的
class
实例对象的方法。
所有类都由类装载器载入,载入内存中的类对应一个
java.lang.Class
实例。存在一个
Bootstrap Loader
(以下简称为
BL
),由
C++
写成,负责在虚拟机启动后一次性加载
Java
基础类库中的所有类。其他的类装载器由
java
写成,都是
java.lang.ClassLoader
的子类。除
BL
之外的所有类装载器都有一个
parent
属性,指向其父装载器。
用户自定义的类装载器是
java.lang.ClassLoader
的子类的实例,它以定制的方式装入类。
<!---->l
<!---->装载一个类时,首先要装载该类的基类及其接口
<!---->l
<!---->Java
基础类由
BL
在虚拟机启动时一次性载入
<!---->l
<!---->包含
main()
的入口类由
AL
的
loadClass()
方法载入。
<!---->l
<!---->
由
new
关键字创建一个类的实例。该类由运行时刻包含该
new
语句的类实例的类装载器(
ClassLoader.getCallerClassLoader()
)的
loadClass()
方法载入
连接
验证
连接过程的第一步是验证
-
确认类型符合
JAVA
语言的语义,并且它不会危及虚拟机的完整性。确保每个
final
类不含有子类,
final
方法不能被覆盖,以及常量池中所有的域引用和方法引用有有效的名字和类型描述符号。
准备
JAVA
虚拟机为类变量分配内存,设置默认初始值(非初始化时的默认值)。
解析
初始化
在初始化阶段,
Java
虚拟机设计者需要将类变量赋予正确的初始值。
<clinit>
方法:类变量初始化语句与静态初始化块
- 大小: 14.2 KB
- 大小: 11.1 KB
分享到:
相关推荐
通过对JavaClass文件结构的理解,可以有效地实现一个JavaClass文件校验器,进而确保加载到JVM上的Class文件是安全可靠的。这对于Java开发者而言是一项重要的技能,有助于提高Java程序的质量和性能。
一、Java类文件结构 Java源代码(.java文件)在经过Java编译器(javac)处理后,会生成对应的Class文件。Class文件采用一种特殊的二进制格式,这种格式具有固定结构,主要包括以下几个部分: 1. 魔数:标识文件为...
2、可处理多个*.class文件,可以处理文件夹内的所有文件,甚至可以处理*.jar文件; 3、带有多页面文本编辑器,也可集成在资源管理器中,随时点击右键都可进行操作; 4、支持java语法的高亮显示; 使用说明: ======...
1. **Class文件结构** Java Class文件遵循特定的文件格式,这个格式由一系列的8位字节构成,包括魔数(Magic Number)、版本信息、常量池、访问标志、类和父类索引、接口索引集合、字段表集合、方法表集合、属性表...
Java Class文件是Java程序编译后的二进制格式,它包含了类和接口的定义、方法体、常量池等信息,但这些信息是以机器可读的字节码形式存在,对于人类来说不易理解。为了查看和理解Class文件内部的源代码,我们就需要...
首先,让我们深入了解一下Java Class文件的结构。一个.class文件包含了Java程序的基本结构单元,如类、接口、字段和方法定义。它采用特定的字节码格式,使得虚拟机(JVM)能够理解并执行其中的指令。这些字节码由一...
### JAVA Class 文件结构详解 #### 一、概述 在Java编程语言中,`.class`文件是一种重要的二进制文件格式,用于存储Java类的编译结果。这些文件由Java编译器生成,并作为Java虚拟机(JVM)执行的基础。本文将深入...
### Java反编译工具:将.class文件转换为.java文件 #### 概述 在软件开发领域,有时我们可能需要分析第三方库或者开源项目的内部结构,这时就需要借助于反编译工具来帮助我们阅读和理解其源码。Java作为一种广泛...
通过对Class文件结构的学习,我们可以更好地理解Java程序的执行机制及其优化方式。 #### 二、Class文件的整体结构 Class文件是一种特定格式的二进制文件,用于存储由Java编译器生成的字节码。每个Java类或接口都会...
首先,让我们详细了解一下Java class文件的结构。一个class文件由一系列字节组成,这些字节按照特定的格式排列,包括魔数、版本信息、常量池、访问标志、类和父类索引、接口索引集合、字段表集合、方法表集合以及...
Java反编译是将已编译的字节码(.class文件)转换回源代码(.java文件)的过程,这对于理解和学习已有的Java程序、逆向工程或调试都是很有用的。标题提到的"java反编译工具"是用于这个目的的软件,它能够帮助开发者...
本篇文章将详细讲解如何使用指定的"电脑java class文件查看与修改工具"来查看和修改这些文件。 首先,我们要了解的是`jd-gui查看.exe`。这是一个名为JD-GUI的开源工具,它允许开发者直观地查看Java字节码(.class...
2. **JD-GUI**:由JetBrains开发,它提供了一个图形界面,可以直接打开.class文件并显示对应的源代码。它适合快速查看代码,但不支持编辑或保存反编译的结果。 3. **Procyon**:这是另一个开源项目,它不仅是一个反...
Java Class文件编辑器,如JD-GUI 0.3.3 绿色版,是一种用于查看和理解Java字节码的工具,对于开发者而言尤其重要,因为它提供了将已编译的`.class`文件反编译回源代码的能力。在深入讨论这个工具之前,我们先来了解...
JavaClassViewer-2.0.4, 用于理解Class文件结构。 解析出class结构,以及十六进制的表示,特别方便。 原下载地址: http://www.softpedia.com/get/Programming/File-Editors/Java-Class-Viewer.shtml。另外也可以参考...
Java class文件是Java程序编译后的二进制代码,它包含了类、方法、变量等信息。但是,由于class文件是以机器可读的形式存在,对于人类来说并不直观。这时,我们就需要借助于反编译工具来将class文件转换回源代码...
Java Class文件反编译工具是开发者在处理已编译的.class文件时的一种实用工具,它能够将二进制的Class文件转换回可读性更强的源代码格式,这对于理解和调试已封装的库或分析未知的Java程序至关重要。本文将详细介绍...
2. **错误调试**:在没有源代码的情况下,通过查看CLASS文件的字节码,可以帮助定位和修复运行时错误。 3. **学习Java字节码**:对于想要深入理解Java虚拟机(JVM)的人来说,这是一个很好的学习工具,因为它可以...
Class文件是Java编译器将源代码编译后的结果,包含了类的结构信息、方法定义、常量池等关键数据。理解并能解析Class文件,对于进行JVM优化、字节码分析、动态代理、插桩等高级技术至关重要。 首先,Class文件是以二...
本资源提供的是一款名为JD-GUI的免费Java反编译工具,它可以帮助开发者将.class文件转换回易于理解的.java源代码格式。 JD-GUI是一款图形用户界面应用,设计简洁,使用方便。它允许用户直接打开.class文件,快速...