作者:asklxf 文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=107
今天继续分析Class文件的结构。
上次读取了constant pool,紧接着是这个类或接口的Access flags,JVM定义的关于class或interface的Access flags有:
private static short ACC_PUBLIC = 0x0001;
private static short ACC_FINAL = 0x0010;
private static short ACC_SUPER = 0x0020;
private static short ACC_INTERFACE = 0x0200;
private static short ACC_ABSTRACT = 0x0400;
// read access flags:
short access_flags = input.readShort();
System.out.print("Access flags:");
if((access_flags & ACC_PUBLIC) == ACC_PUBLIC)
System.out.print(" public");
if((access_flags & ACC_FINAL) == ACC_FINAL)
System.out.print(" final");
if((access_flags & ACC_SUPER) == ACC_SUPER)
System.out.print(" super");
if((access_flags & ACC_INTERFACE) == ACC_INTERFACE)
System.out.print(" interface");
if((access_flags & ACC_ABSTRACT) == ACC_ABSTRACT)
System.out.print(" abstract");
System.out.println();
然后是this class和super class:
// read this class and super class:
short this_class_index = input.readShort();
short super_class_index = input.readShort();
System.out.println("This class = " + this_class_index);
System.out.println("Super class = " + super_class_index);
根据this class的index可以从constant pool中得到这个class的信息,super class也一样。每个class都有super class,只有Object的super class index=0。
接下来是这个class继承了多少个interface和每个interface在constant pool中的index:
// read interfaces count:
short interfaces_count = input.readShort();
System.out.println("Interfaces count = " + interfaces_count);
// read each interface:
for(int i=1; i<=interfaces_count; i++) {
short interface_index = input.readShort();
System.out.println("No. " + i + " interface index = " + interface_index);
}
结果如下:
Access flags: public final super
This class = 2
Super class = 4
Interfaces count = 0
待续...
分享到:
相关推荐
第2节: class文件及类加载详解-01第2节: class文件及类加载详解-01第2节: class文件及类加载详解-01第2节: class文件及类加载详解-01第2节: class文件及类加载详解-01第2节: class文件及类加载详解-01第2节: ...
在Java开发过程中,有时我们需要查看或理解某个JAR包中未提供源代码的Class文件的内部实现。本文详细介绍了如何在Eclipse环境中反编译Class文件,以便查看对应的源码。 首先,反编译Class文件是为了能理解那些无法...
【Eclipse中反编译Class文件详解】 在Java开发中,有时我们需要查看或理解某些库的内部实现,尤其是当我们遇到不公开源代码的类文件时。Eclipse作为主流的Java集成开发环境,提供了多种方式来查看编译后的Class文件...
在IT行业中,开发人员经常会遇到需要查看Java字节码(Class文件)源代码的情况,例如在分析二进制库或解决兼容性问题时。本文将详细介绍如何在Eclipse集成开发环境中利用反编译工具实现这一目标,特别是针对Eclipse...
2. **版本号**:紧接着魔术码之后,同样占用4个字节,包含主要版本号和次要版本号,用于指示Class文件的版本。这使得JVM可以根据版本号来判断Class文件是否与当前JVM版本兼容。 3. **常量池**:常量池是Class文件中...
Java Class 文件运行方法详解 在 Java 开发中,运行 Class 文件是非常重要的一步骤。下面将详细介绍运行 Java 的 Class 文件方法的相关知识点。 一、运行 Class 文件 要运行 Class 文件,需要使用 Java 命令,...
Java Class文件是Java虚拟机(JVM)运行的基础,它是编译后Java源代码的二进制表示形式。在深入讲解Class文件格式之前,我们需要理解Java字节码的概念,它是一种平台无关的中间语言,使得Java程序可以在任何支持JVM...
下面将详细介绍.class 文件反编译到.java 文件的过程,包括反编译工具的使用和反编译后的修改、再编译等步骤。 一、反编译工具的选择 在反编译.class 文件时,需要使用专门的反编译工具。目前有多种反编译工具可供...
总的来说,ClassFinal作为一款Java class文件安全加密工具,为开发者提供了一种简单、高效的代码保护方案,尤其适合于那些重视代码安全但又不想改动大量代码的企业级项目。其兼容性和易用性使其在Java开发领域具有...
### JVM加载Class文件详解 #### 一、Java与JVM中的Class文件加载机制概述 Java作为一种动态性极强的解释型编程语言,在程序运行时,Java虚拟机(JVM)负责将编译生成的`.class`文件加载到内存中进行执行。在Java...
### Class文件结构组成详解 #### 一、Class文件概述 Class文件是Java程序编译后的产物,由编译器生成并被Java虚拟机(JVM)加载执行。它以8位字节流的形式组织数据,共包含15个有意义的组成部分。每个部分紧密相连,...
Hibernate 配置文件详解 Hibernate 是一个流行的 ORM(Object-Relational Mapping)框架,用于简化 Java 应用程序中的数据库交互。 Hibernate 的配置文件是其核心组件之一,用于定义 Hibernate 的运行期参数。下面...
### Spring配置文件详解 #### 一、引言 在Java Web开发领域,Spring框架因其强大的功能和灵活性而受到广泛欢迎。对于初学者来说,理解Spring的配置方式是至关重要的第一步。本文将详细介绍Spring中常见的配置文件...
在Java开发过程中,有时我们需要查看已编译的`.class`文件的源代码,这对于调试、学习或者理解已有的代码库非常有帮助。Jadeclipse就是这样一款插件,它允许我们在Eclipse集成开发环境中直接查看`.class`文件的源码...
### Class文件格式详解 #### 一、概述 在Java编程语言中,编译后的源代码会生成`.class`文件,这种文件格式对于Java程序的执行至关重要。本文将深入探讨Class文件格式的基本结构、组成部分以及其如何支持Java...
在Java编程领域,.class文件是Java源代码经过编译后的二进制形式,它包含了程序的字节码,是Java虚拟机(JVM)执行的基石。然而,由于.class文件是二进制格式,普通用户无法直接阅读其内容。这时,我们就需要借助于...
Java字节码是Java程序编译后的产物,它以`.class`文件的形式存在,是Java虚拟机(JVM)能够理解和执行的二进制代码。本文将深入解析Java字节码的格式,帮助你理解其背后的运行机制。 1. **Java字节码结构** Java...
### Spring MVC 的配置文件详解 #### 一、配置分发器 (DispatcherServlet) Spring MVC 的核心组件之一就是 DispatcherServlet,它作为整个框架的入口,负责处理所有进入 Spring Web 应用程序的请求。为了使 ...
2. **Class-Path**: 定义了运行此JAR文件时需要的其他JAR文件或库的路径。这些依赖项可以帮助解释程序如何找到并加载所需的类。 3. **Manifest-Version**: 用于声明MANIFEST.MF文件的版本,通常是`1.0`。 4. **...