微科社区,轻松开发从此开始! 请登陆 免费注册

微科社区

当前位置:首页 > Java平台 > J2EE >

JVM探索之路之Class文件结构解析(三):访问修饰

时间:2017-01-08 03:17  浏览:努力统计中...
JVM 学习笔记目录: JVM探索之路之Class文件结构解析(一):Class文件的格式与定义 JVM探索之路之Class文件结构解析(二):常量池 JVM探索之路之Class文件结构解析(三) 先将分析需要的

 

JVM 学习笔记目录:

JVM探索之路之Class文件结构解析(一):Class文件的格式与定义 

JVM探索之路之Class文件结构解析(二):常量池  

 

JVM探索之路之Class文件结构解析(三)

先将分析需要的资源信息列出来:

 case:

package com.beliefbetrayal.clazz;

public class ClassFileTest {

private int m;

public int getM() {
return m;
}

public void setM(int m) {
this.m = m;
}
}

Class文件结构表:

javap工具分析Class文件信息常量池部分:

在上一次分析Class文件的博文中已经详细分析了如何手工解析Class文件中的constant_pool信息,现在接着分析Class文件结构中紧随constan_pool的访问标示符(access_flag)。使用WinHex打开ClassFileTest.class文件,并找到contant_pool结束的位置:

  查看"javap工具分析Class文件信息常量池部分"找到最后一个常量,其值为"ClassFileTest.java",注意";"并不是Class文件中数据,在WinHex中找到它对应的值,以确定常量池结束的位置。查看"Class文件结构表",可知紧随constan_pool的是2个字节代表的访问标志,这个标志的作用是用于识别一些类或者接口层次的访问信息,例如:这个Class是类还是接口,是否定义为public,是否定义为abstract,如果是类的话,是否被定义为final类型的之类的信息。具体的标志位及标志的含义如下表:


访问标志 
标志名称标志值含义
ACC_PUBLIC0x0001是否为public类型
ACC_FINAL0x0010是否被声明为final,只有类可以设置,接口不能设置该标志
ACC_SUPER0x0020是否允许使用invokespecial字节码指令(查了一下该命令的作用为"调用超类的构造方法,实例的构造方法,私有方法"),JDK1.2以后的编译器编译出来的class文件该标志都为真
ACC_INTERFACE0x0200标识这是一个接口 
ACC_ABSTRACT0x0400 是否被声明为abstract类型,对于接口和抽象类来说此标志为真,其他类为假
ACC_SYNTHETIC0x1000 标识这个类并非由用户代码生成
ACC_ANNOTATION
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线------
推荐内容