class 文件介绍

属性表集合
属性表在class文件,字段表,方法表等都可以携带自己的属性表集合,用于描述某些场景下专有的信息。

虚拟机规范中定义的属性

属性名称位置含义
Code方法表java代码编译成的字节吗指令
ConstantValue字段表final关键字定义的常量值
Deprecated类方法表,字段表被声明为deprecated的方法和字段
Exceptions方法表方法抛出的异常
EnclosingMethod类文件仅当一个类为局部类或者匿名类才拥有的属性,用于标识类所在的外围方法。
InnerClasses类文件内部类列表
LineNumberTableCode属性java源码的行号与字节码指令的对应关系
LocalVariableTableCode属性java局部变量描述
StackMapTableCode属性jdk6新增属性,供新的类型检查验证器(Type Checker)检查和处理目标方法的局部变量和操作数栈所需要的类型是否匹配。
Signature类,方法表,字段表jdk5中新增支持范型情况下的方法签名。在ajva语言中任何类,接口初始化方法或者成员的范型签名如果包含了类型变量Type Variables,或者参数化类型Parameterized Types,则Signature属性会为它记录范型签名信息,由于java的范型擦出,为了避免类型信息被擦出后导致签名混乱,需要这个属性记录范型信息中的信息。
SourceFIle类文件记录源文件
SourceDebugExtension类文件jdk6中新增的属性,用于存储额外的调试信息,譬如在进行jsp文件调试,无法通过java堆栈来定位jsp文件的行号,使用该属性就可以用于存储这个标准锁新加入的调试信息。jsr-45规范为这些非java语言编写,却需要编译成字节码并运行在java虚拟机中的程序提供了agiel进行调试的标准机制。
Synthetic类,方法表,字段表标识方法或字段为编译器自动生成的。
LocalVariableTypeTablejdk5中新增的属性,它使用特征签名代替描述符,是为了引入范型语法之后能描述范型参数化类型而添加
RuntimeVisibleAnnotations类,方法表,字段表jdk5中新增的属性,为动态注解提供支持。运行时可见
RuntimeInvisibleAnnotations类,方法表,字段表运行时不可见
RuntimeVisibleParameterAnnotations方法表jdk5中新增的属性,作用对象为方法参数

class 文件介绍
class文件包含的内容:

java的平台无关性基于虚拟机以及class文件。class文件的结构
class文件采用c语言结构的伪结构来存储数据。无符号数和表。无符号数时基本的数据类型,以u1,u2,u4等来分别代表1,2,4个字节。
表则是由多个无符号数以及其他表组成的复合数据类型,习惯以_info结尾。

简述clas文件的组成
magic
minor_version
major_version
constant_pool_count
constant_pool
access_flags
this_flag
super_flag
interfaces_counts
interfaces
fields_counts
fields
methods_counts
methods
attributs_count
attributs


magic和class文件的版本

每个class文件的头4个字节被称为魔数(Magic Number)它的作用确定文件能否被虚拟机接受的class文件。之后两个字节用来显示文件的次版本和主版本号。
jdk1.7 (默认-target 1.7)对应的16进制 33 对应的10进制 51

常量池
class文件结构中和其他项目关联最多的数据类型,也是占用class 文件空间最大的数据。
常量池中主要由两大类常量:字面量Literal 和符号引用Symbolic Reference。
符号引用属于编译原理方面的概念包括下面三类常量
1类和接口的全限定名Fully qualified name
2字段的名称和描述(descriptor)
3方法的名称和描述

访问标志 access_flags
用于识别类和接口的访问信息,例如class时类还是接口,是否public,是否abstract,是否final,等等。

类索引,父类索引和接口索引集合
this_class super_class 都是u2类型数据,而interfaces则是属于u2类型的集合。从class文件也体现出java语言的一个特定就是单继承但可以实现多接口。

字段表 field_info
用于描述接口或者类中声明的变量。字段field包括类级变量或者实例级变量,不包括方法内部的局部变量。
java中描述一个字段的信息有哪些?字段的作用域(public private protected 等修饰符 ),是否实例变量或类变量(static)可变性(final),并发可见性(volatile,是否强制从主内存读写),是否被序列化(transient 修饰)字段数据类型(基本数据类型,对象,数组),字段名称。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值