Class文件结构介绍[访问标志,类索引,父类索引,接口索引集合]-阿里云开发者社区

开发者社区> 游客a74jvhcp7vclg> 正文

Class文件结构介绍[访问标志,类索引,父类索引,接口索引集合]

简介: 在常量池结束后,紧接着的两个字节代表访问标志(access_flags),这个标志用于识别一些类或者接口层次的访问信息,包括:这个Class是类还是接口,是否定义为public类型,是否定义为abstract类型,如果是类的话是否被声明为final等,
+关注继续查看


访问标志

 在常量池结束后,紧接着的两个字节代表访问标志(access_flags),这个标志用于识别一些类或者接口层次的访问信息,包括:这个Class是类还是接口,是否定义为public类型,是否定义为abstract类型,如果是类的话是否被声明为final等,

image.png

注意:access_flags中一共有16个标志位,此处只列举了其中8个。

定义此类:

public final  class Test2 {

    private static final String NAME="bobo";
    
    private int age = 18;
    
    public void fun1(){
        int b = 20;
        int c = 30;
        int d = b+c+age;
        System.out.println(d);
    }
}

访问标志对应的信息

image.png

 标识结果的值为0x0031,是多标识符组成,即由多个标识符的值累加得来。因为标识符对应的值的特殊性,值累加后的结果可以唯一定位由哪些标识符组成,常见的0x0021只有ACC_SUPER和ACC_PUBLIC的值累加才能得到,而上面的0x0031只有ACC_SUPER与ACC_FINAL与ACC_PUBLIC的值累加后得到。

类索引,父类索引与接口索引集合

 类索引(this_class)和父类索引(super_class)都是一个u2类型的数据,接口索引计数器也是一个u2类型的数据,接口索引集合则是一组u2类型的数据集合,Class文件中的这几项数据来确定这个类的继承关系

类索引

 确定当前类的全限定名

image.png

image.png

父类索引

 确定当前类的父类的全限定名。由于java单继承的原则,所以父类只可能有一个;由于Object是所有其他类的基类,所以除了Object类本身的super_class为0意外,其余的所有类的super_class都不为0.

image.png

接口索引集合

 按照当前类implements(或者当前接口extends)的接口顺序,从左往右排列在接口的索引集合中。

public final  class Test2 implements Serializable,Runnable{

    private static final String NAME="bobo";
    
    private int age = 18;
    
    public void fun1(){
        int b = 20;
        int c = 30;
        int d = b+c+age;
        System.out.println(d);
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        
    }
}

对应的接口索引:

image.png

小结:

 类索引的直接值,父类索引的直接值,接口索引集合中的索引的直接值,代表的是一个常量池中的索引值,该索引值对应为一个CONSTANT_Class_info , CONSTANT_Class_info 又指向CONSTANT_Utf8_info,CONSTANT_Utf8_info中存储着全限定名字符串信息。

参考《深入理解Java虚拟机》


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
mysql full text全文索引必要条件
show variables like 'ft_m%' 'ft_max_word_len', '84''ft_min_word_len', '4' 对于英文来说, ft_min_word_len=4是可以的。但是对于中文,需要为1. 要不就没有办法全文搜索了。
607 0
推荐一个WINDOWS系统文件介绍的网站
http://www.cn.filename.info/文件名信息数据库: 病毒, 特洛伊人, 背后?文件名义上 _*.* (5) a*.* (129) b*.* (38) c*.
701 0
【技术贴】解决Eclipse编译java源文件之后没有生成class文件|找不到class文件
【技术贴】解决Eclipse编译java源文件之后没有生成class文件|找不到class文件   今天遇到的,非常恶心,项目下有个红叉叉,因为是公司的老项目,1.4的jdk,我把工程导入后,发现没有报错,但是有小红叉,自动保存代码编译完java源文件之后,找不到class文件。
1410 0
PHP中利用文件锁实现日志写入和网站接口访问等常见场景下的并发控制
针对并发环境下网站、日志文件写入产生的脏数据、更新丢失等情况的解决思路之一
2630 0
+关注
游客a74jvhcp7vclg
10余年开发架构经验,同时乐于技术分享!
332
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载