请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

阜平县吧 Class 文件结构 不按牌理出牌

[复制链接]
查看: 754|回复: 1

223

主题

470

帖子

922

积分

等待验证会员

积分
922
发表于 2019-4-17 13:02 | 显示全部楼层 |阅读模式
Class 文件是由Java说话大概其他说话编译而获得的,然后再交给 JVM 去加载和履行。对于 Class 文件,我们可以经过文本编辑器检察它的 16 进制编码,然后分析它的组成机关。下面我们看一下 Class文件包括哪些模块:

Class 文件结构

Class 文件结构  科技资讯 130212deetyrsty9kaskyy
Class 文件结构

对于Class字节码文件的检察,最初我们会用16进制的文本编辑器检察。可是这类方式并不常用,一般情况下我们会利用 javap -verbose XX.class 的号令来检察 Class结构。固然更好的方式是经过第三方工具(jclasslib)来检察。下面我们来具体的先容一下具体的结构。
<h1>魔数

魔数是 Class文件的 LOGO 标识。也就是当利用16进制文本编辑器检察Class文件时,开首的字符是:CAFEBABE。
<h1>版本号

Class文件的版本号包括了:主版本号和次版本号。两个信息别离占用了2个字节的巨细,而且紧跟在CAFEBABE(魔数)前面,依次为次版本号、主版本号。下面为用工具检察的成果:

Class 文件结构

Class 文件结构  科技资讯 130212ps5ttzka9a7tpp46
版本号

下面列出了版本号和编译器版本的对应关系:

Class 文件结构

Class 文件结构  科技资讯 130212jndet1qshaqtmhnh
版本号和编译器版本的对应关系

<h1>常量池

常量池中的信息比力丰富,这个类中的根本信息都寄存在里面。其中首要包括了:字面量(Literal)和标记援用(Symbolic References)两大类。首要包括了以下信息:

  • 类和接口的全限命名
  • 字段的称号和描写符
  • 方式的称号和描写符
在工具中检察的结果以下所示,其中我们从General Information中能看到常量池的巨细是19,而Constant Pool中只要18个。这个是由于index为0的未展现出来,用作一些特别处置利用。

Class 文件结构

Class 文件结构  科技资讯 130212ay0f2zg0pgv20l8p
常量池

常量池的范例首要包括以下范例:

Class 文件结构

Class 文件结构  科技资讯 130212jo9eqhw5qoqhjsq6
常量池的范例

<h1>拜候标志

紧跟在常量池以后的就是拜候标志(access_flags),这个标志用于识别一些类大概接口条理的信息。其中包括了:是类还是接口;能否界说为public;能否为abstract范例;能否为final等信息。具体的标志位和寄义以下所示:

Class 文件结构

Class 文件结构  科技资讯 130213xb1tbxxt21nb3511
拜候标志

<h1>当前类、父类和接口

紧随着拜候标志的是:当前类、父类和接口的信息,以下所示:

Class 文件结构

Class 文件结构  科技资讯 130213xreq99zeizeiqgpu
当前类、父类和接口信息

<h1>字段表调集

紧跟厥后的是:类的属性字段信息。以下所示:

Class 文件结构

Class 文件结构  科技资讯 130213gi3ad8yhrdddadvi
类的属性字段信息

字段的拜候权限标志以下表格所示:

Class 文件结构

Class 文件结构  科技资讯 130213j2jd94l9kaaeadwl
字段的拜候权限标志

<h1>方式表调集

方式表调集和字段表类似,依次包括了:拜候标志(access_flags)、称号索引(name_index)、描写符索引(descriptor_index)、属性表调集(attributes)。以下图所示:

Class 文件结构

Class 文件结构  科技资讯 130213th755soeix6l8777
方式表调集

对于方式表调集的拜候标志,有以下表格:

Class 文件结构

Class 文件结构  科技资讯 130213gica6o3a4kez6zik
方式表调集的拜候标志

<h1>属性表调集

这里面的属性代表的并不是Java类中的字段属性,而是Class文件、字段表、方式表表中各个模块所照顾的属性。由于属性相对较多,利用的位置也不尽不异,下面只罗列一下常见的一些属性。

Class 文件结构

Class 文件结构  科技资讯 130213nsasqqt39zf6n675
常见属性列表

Code 属性
Code属性位于方式表的每个方式当中,其中包括了方式履行的字节码指令、异常处置等信息。以下所示:

Class 文件结构

Class 文件结构  科技资讯 130214v9k9dkm1hao9cqzz
Code 属性

LineNumberTable 属性
该属性位于Code属性表中,寄存了字节码指令对应到.java文件中的哪一行代码。以下图所示:

Class 文件结构

Class 文件结构  科技资讯 130214xbpcx70c1zba7y1b


上图中的对应关系暗示的是:字节码指令偏移地址为0的字节码,对应的代码行数是第8行。
LocalVariableTable 属性
LocalVariableTable 属性用于描写栈帧中部分变量表的变量和Java源码中的变量之间的关系。它不是运转时必须的属性,可以经过 -g:none 或 -g:vars 来取消这项信息的天生。假如取消这部分信息,在IDE中的方式提醒信息的入参的参数称号,将表示为arg0、arg1等字样。
SourceFile 属性
SourceFile 属性用于记录天生 Class文件的源文件的称号。可选属性,可以经过 -g:none 或 -g:source 来开启/封闭天生。以下图所示:

Class 文件结构

Class 文件结构  科技资讯 130214qj3ww3c43m4ldcto
SourceFile 属性

InnerClasses 属性
InnerClasses 属性用于记录内部类与宿主类之间的关联。假如一个类内部界说了内部类,就会发生 InnerClasses属性。以下所示:

Class 文件结构

Class 文件结构  科技资讯 130214bruuu8hxmlgggrax
InnerClasses 属性

Deprecated 属性
Deprecated属性可以用在类、方式、字段等结构中,用于暗示类、方式、字段在未来的版本中有能够烧毁。其中对于方式的烧毁以下所示:

Class 文件结构

Class 文件结构  科技资讯 130214dqj3qfcrcf1yycrq
Deprecated 属性

总结
对于 Java字节码的组成,上面只是简单的先容一下,仅仅是对于Class结构有个整体的熟悉。假如想要具体的领会 Class文件结构,请参阅《Java虚拟机标准(Java SE 8版)》。不外在平常的Class文件检察中,还是借助工具检察比力间接方便。
参考:《深入了解Java虚拟机》
感谢您的阅读
回复

使用道具 举报

202

主题

440

帖子

844

积分

等待验证会员

积分
844
发表于 2019-4-17 12:36 | 显示全部楼层
转发了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 快猫网-人工智能和智能硬件领域的互联网科技媒体 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表