java虚拟机四

Access
access_flags是一种由标志所构成的掩码,用于表示某个类或接口的访问权限属性。

This(本类索引)
this_class的值必须是对常量池表中某项的一个有效索引值常量池在这个索引处的成员必须为CONSTANT_Class_info类型结构体,该结构表示这个class文件所定义的类或接口。

Super(父类索引)
对于类来说,super_class的值要么是0,要么是对常量池中某项的一个有效索引值,如果他的值不是0,那么常量池在这个索引处的成员必须为CONSTANT_class_info类型的常量。
如果class文件的super_class的值为0,那这个class文件之可能用来表示Object类,因为它没有父类。
对于接口的class文件的super_class项必须是对常量池表中某项的一个有效索引值,常量池在这个索引处的成员必须为代表Obeject类的CONSTANT_class_info结构。

Interface(本类索引)
表示类或接口的直接父接口
父接口的表示由接口总数和接口数组组成
每个父接口的元素为CONSTANT_class_info.

Field
表示类中定义的字段(包含静态和非静态字段)
field_info
access_flags 字段访问标记(9种标记)
name_index 字段名
descriptor_index 字段描述符的索引
attribute_count 字段属性总数
attribute_info 字段属性元素数组
字段分类属性有六种

  • ConstantValue
    表示静态变量的初始值(static final修饰),且必须是值类型 和String类型(String类型不能是new的)

  • Synthetic
    类成员没有在源文件中出现,由编译器自动产生的

  • Signature
    泛型签名

  • Deprecated
    过时的字段

  • 注解属性
    RuntimeVisibleAnnotations
    使用的注解,并且运行时是可见的注解(JVM可以反射读取)
    注解定义是RetentionPolicy.RUNTIME注解

RuntimeInvisibleAnnotations
使用的注解,并且运行时是不可见的注解(JVM不可以反射读取)
注解定义是RetentionPolicy.CLASS注解

面试题:注解生命周期

  • RetentionPolicy.SOURCE
    此注解类型的信息只会记录在源文件中,编译时将被编译器丢弃,不会存在字节码class文件中
  • RetentionPolicy.CLASS(默认值)
    编译器将注解记录在class字节码文件中,但不会加载到JVM中,无法反射读取
  • RetentionPolicy.RUNTIME
    编译器将注解记录在class字节码文件中,在执行时加载到JVM中,可以反射读取
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值