今天继续分析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
待续...
分享到:
相关推荐
在Eclipse中反编译Class文件完全详解在Eclipse中反编译Class文件完全详解在Eclipse中反编译Class文件完全详解
第2节: class文件及类加载详解-01第2节: class文件及类加载详解-01第2节: class文件及类加载详解-01第2节: class文件及类加载详解-01第2节: class文件及类加载详解-01第2节: class文件及类加载详解-01第2节: ...
jadeclipse【Eclipse下查看class文件源码】附配制详解
运行java的class文件方法详解.docx
该内容来自网络,其中包括三个文件: 1、jad.rar 2、jadclipse_3.3.0.rar 3、安装说明.doc 主要针对Eclipse3.3以上版本的IDE反编译工具。
java-内部类(InnerClass)详解.pdf
2.2 major_version.minor_versionmajor_version.minor_version合在一起形成当前.class文件的版本号,
我之前上传了反编译插件jad的jar包:http://download.csdn.net/source/1665663,但有用户反映不能使用,特上传该说明文档,希望有帮助。
一、运行class文件 执行带main方法的class文件,命令行为: java <CLASS> 注意:CLASS文件名不要带文件后缀.class 例如: 代码如下: java Test 如果执行的class文件是带包的,即在类文件中使用...
NULL 博文链接:https://plkong.iteye.com/blog/1680902
java class文件格式详解,pdf格式,6M
Hibernate_配置映射文件详解
Struts2属性文件详解 struts.configuration 该属性指定加载Struts 2配置文件的配置文件管理器.该属性的默认值是org.apache.Struts2.config.DefaultConfiguration, 这是Struts 2默认的配置文件管理器.如果需要实现...
换言之,每当编写并且编译了一个新类,就会产生一个Class对象(恰当地说,是被保存在一个同名的.class文件中)。在运行时,当我们想生成这个类的对象时,运行这个程序的 Java虚拟机(JVM)首先检查这个类的Class对象...
内部分享整理的jvm资料,主要是对class文件进行结构化详细介绍
java class的文件结构,java class文件结构是基于字节流的,用unicode进行编码,下面说说java Class文件内部结构分析
了解Class文件的结构组成,对于我们后续的JVM以及Java原理深入学习是很有帮助的,因为Class文件帮我们默默的做了很多事,比如、为什么对象方法中可以直接使用this变量?!本文将带领大家,一步步,从开头到结尾,...
主要详细介绍了运行java的class文件方法的相关资料,需要的朋友可以参考下
The org.apache.struts2.config.Configuration implementation class org.apache.struts2.config.Configuration接口名 struts.configuration.files A list of configuration files automatically loaded by ...