java编程

java的class文件查看(入门)

字号+ 作者:风潇潇 来源:原创 2016-09-22 16:36 我要评论( )

今天用winHex来看了看java的class二进制文件,还不错,有点收获。对java虚拟机方面的东西,又感觉懂了些

先来介绍一下2进制、10进制、16进制
简单说,几进制就是逢几进1。比如2进制就是逢2进1。1+1=2。但2进制中没有2这个数字。1+1=10,注意,进位了。
那10进制和16进制也就一样的道理。但其中16进制。在0-9之后后为A-F,分别代表着10进制的10-15。注意15是F,F+1=10。
那二进制和16进制怎么换呢?二进制1111(2)=2^4-1=2^3+2^2+2^1+2^0(10)=15(10) =F(16)  正好4位2进制可以代表一个16进制位。
字节和字长,bit
在计算机中,所有数据都是用二进制表示的,比如01100001,这就是一个8位的二进制,一个bit就更小了,代表一位2进制,8个bit表示一个字节。
字长表示计算机cpu所能处理的二进制位数。32位机器中,则他的字长为32位,也就是说4个字节。

上面都是基础知识,看看这张图
先上一张图。


     java的二进制class文件,结构紧凑,中间没有任何分隔符。按这个逻辑来说,他的里面的结构应该是按照严格的顺序以及大小来编排的。相当于约定优于配置。jvm只认识这样的规则
    那上面这张图怎么看呢?这就是class文件的数据,里面由许多2位的16进制的数构成,中间以空格隔开,一个2位的16进制可以代表什么?对了,正好是一个8位的二进制。如果上面显示FF,则正好是1111 1111,正好代表一个字节。此时1111(2)=15(10)=F(16)清楚了吧。
     java的Class文件里面的数据结构是一种伪结构的方式:这种方式只有两种数据类型,无符号数和表。无符号数属于基本的数据类型,以u1、u2、u4、u8来区分,无符号数可以用来描述数字、索引引用、数量值或者按照UTF-8编码构成。u代表无符号,后面的数字代表多少字节。表是由无符号数以及其他表数据项构成。整个Class文件就是一张表。如下图:
  
按照上面的表,那第一行的0-3 则为magic数,16进制正好为:COFEBABE.。对吧。。其他就不需要我来说了,对着表格对着class文件一个个往下看就对了。



转载请注明出处。

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • json解析与java对象序列化成json

    json解析与java对象序列化成json

    2017-09-07 11:47

  • jvm中class文件结构解析学习

    jvm中class文件结构解析学习

    2017-05-18 02:51

  • java动态绑定以及invokespecial指令

    java动态绑定以及invokespecial指令

    2017-06-19 14:57

  • java LinkedList数据结构

    java LinkedList数据结构

    2017-03-30 15:33

网友点评
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)