Java Class文件结构

转载 2015年05月07日 14:48:12
java Class文件结构


    java虚拟机规范第二版,Java虚拟机规范第三版(java se 1.7版本),发现java虚拟机规范中java class的文件结构部分并没有太大的变化。


java语言是跨平台的,所谓一次编写,到处运行。之所以是跨平台的,就是java定义了一套与操作系统,硬件无关的字节码格式,这个字节码就是用java class文件来表示的,java class文件内部定义了虚拟机可以识别的字节码格式,这个格式是平台无关性的,在linux系统或者在windows系统上都是一致的。这个就好比html文件,我们定义好规范,这个系统只要去按照规范显示出来里面的内容就好了。好比html就是class文件,浏览器就是虚拟机一样,通过浏览器去执行html的渲染过程,我们无论是用手机,Windows系统,苹果系统上网,显示出来的内容都是一样。 java虚拟机可以从class文件中加载预定义的字节码,也可以从网络,数据库,消息文件中加载字节码。


java class文件结构是基于字节流的,用unicode进行编码。其实想想也可以完全用xml文件表示,只不过用xml表示的字节码文本体积可能会很大,占用空间,同时解析起来比较耗时,而且很容易被人为修改,导致未知错误。下面是class文件的内部结构




ClassFile { 
u4 magic; 
u2 minor_version; 
u2 major_version; 
u2 constant_pool_count; 
cp_info constant_pool[constant_pool_count-1]; 
u2 access_flags; 
u2 this_class; 
u2 super_class; 
u2 interfaces_count; 
u2 interfaces[interfaces_count]; 
u2 fields_count; 
field_info fields[fields_count]; 
u2 methods_count; 
method_info methods[methods_count]; 
u2 attributes_count; 
attribute_info attributes[attributes_count]; 
}
1


U4 代表由无符号四个字节组成


u4 magic :是一个固定的数值,java虚拟机里面称为魔数 ,主要是用来标识是否为java虚拟机所支持的文件结构,目前是0xCAFEBABE


u2 minor_version; u2 major_version; 代表次版本号和主版本号


u2 constant_pool_count; cp_info constant_pool[constant_pool_count-1]; 这里面代表常量池个数以及常量池信息


u2 access_flags : 代表class访问标记,例如:public protected


u2 this_class : 代表这个类的名称 例如 java.lang.Object


u2 super_class : 代表父类名称


u2 interfaces_count; u2 interfaces[interfaces_count]; 实现的接口格式以及接口类名


u2 fields_count; field_info fields[fields_count]; 字段个数以及字段信息


u2 methods_count; method_info methods[methods_count]; 方法个数以及方法信息


u2 attributes_count; attribute_info attributes[attributes_count]; java class文件内部属性信息,和java语言定义的属性没有关系,纯粹就是给java虚拟机用的




以上都是java虚拟机规范中定义的class文件内部结构信息,可以参考 Java虚拟机规范 (Java SE 7版)


每种结构又都定义了自己的结构信息,例如:常量池结构,字段信息,方法信息,类信息,这几种结构之间又都互相引用,下面这幅图简要介绍了java class文件的内部结构信息

其中常量池的里面的信息最为复杂,java虚拟机运行时刻的所有信息都是从常量池来获取的,常量池定义了一下几种结构




【深入Java虚拟机】之二:Class类文件结构

Java是与平台无关的语言,这得益于Java源代码编译后生成的存储字节码的文件,即Class文件,以及Java虚拟机的实现。不仅使用Java编译器可以把Java代码编译成存储字节码的Class文件,使...
  • mmc_maodun
  • mmc_maodun
  • 2014年01月02日 23:55
  • 15588

深入理解JVM06--类文件结构--Class类文件结构及实例

本文是基于周志明的《深入理解Java虚拟机》 Class类文件结构   Class文件     1).是一组以8字节为基础单位的二进制流,     2).各个数据项目严格按照顺序紧凑排列在clas...
  • oChangWen
  • oChangWen
  • 2016年05月19日 22:39
  • 2316

Java Class文件结构解析 及 实例分析验证

Class文件是JVM执行引擎的数据入口,也是Java技术体系的基础构成之一;下面我们详细了解Class文件:先对Class文件结构有个大体了解,并了解Class文件结构里的一些名称定义;而后再详细说...
  • tjiyu
  • tjiyu
  • 2016年12月25日 18:57
  • 3446

java class文件结构

java 代码 public class TestClass { private int m; public int inc(int m) { return m+1; ...
  • u011686226
  • u011686226
  • 2016年09月19日 10:57
  • 381

java class文件结构

要深入理解class文件结构,请移步:http://blog.csdn.net/column/details/zhangjg-java-blog.htmlpackage a; /** * Crea...
  • new_abc
  • new_abc
  • 2016年12月07日 10:06
  • 222

java Class文件内部结构解析

原帖地址:点击打开链接 大学的时候,就看过java虚拟机规范第二版,最近把最新的Java虚拟机规范第三版(java se 1.7版本)温习了一遍,发现java虚拟机规范中java c...
  • u012566693
  • u012566693
  • 2014年12月26日 10:42
  • 419

java Class文件内部结构解析

java语言是跨平台的,所谓一次编写,到处运行。之所以是跨平台的,就是java定义了一套与操作系统,硬件无关的字节码格式,这个字节码就是用java class文件来表示的,java class文件内部...
  • a492846462
  • a492846462
  • 2016年09月06日 17:29
  • 162

Java Class文件结构

一、平台无关性的基石
  • supportUAT
  • supportUAT
  • 2014年05月27日 23:12
  • 284

Java Class文件结构

平台无关性和语言无关性Java在刚刚诞生的时候提出过一个宣传口号:“一次编写,到处运行”,这句话充分表达了软件开发人员对冲破平台界限的渴求。“与平台无关”的理想最终实现在操作系统的应用层上:Sun公司...
  • Nicorui
  • Nicorui
  • 2017年04月06日 22:31
  • 368

java Class文件内部结构解析

java语言是跨平台的,所谓一次编写,到处运行。之所以是跨平台的,就是java定义了一套与操作系统,硬件无关的字节码格式,这个字节码就是用java class文件来表示的,java class文件内部...
  • zhengchao1991
  • zhengchao1991
  • 2016年11月14日 11:37
  • 660
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java Class文件结构
举报原因:
原因补充:

(最多只允许输入30个字)