资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

java的class文件知识点有哪些

这篇文章主要介绍“java的class文件知识点有哪些”,在日常操作中,相信很多人在java的class文件知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java的class文件知识点有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

创新互联建站是一家专注于成都网站设计、成都网站建设与策划设计,深圳网站建设哪家好?创新互联建站做网站,专注于网站建设10多年,网设计领域的专业建站公司;建站业务涵盖:深圳等地区。深圳做网站价格咨询:18982081108

一、class文件内容

java的class文件知识点有哪些

二、内容解释

魔数

magic(魔数)的作用是用于识别文件类型是否是class文件,class文件的魔数是0xCAFEBABE 。

当JVM在尝试加载某个文件到内存中来的时候,会首先判断此class文件有没有JVM认为可以接受的“签名”,即JVM会首先读取文件的前4个字节,判断该4个字节是否是“0xCAFEBABE”,如果是,则JVM会认为可以将此文件当作class文件来加载并使用。

版本号

minor_version和major_version用于标记该class文件是由哪个版本的Java编译器编译而来(jdk1.6,1.7,1.8等)

由低版本的Java编译器编译产生的class文件可以运行在高版本的虚拟机上,即向下兼容,但虚拟机不能执行超过自身版本的class文件,即使高版本class文件除了版本号以外其他内容与低版本class文件完全相同。

java的class文件知识点有哪些

常量池

constant_pool(常量池)主要用于存放Class中的字面常量(literal)以及符号常量 。

字面常量包括:Class中的字符串常量、声明为final的值。

符号常量主要包括:类的全限定名、成员变量的名称和描述符、方法的名和描述符。
常量池由多个常量表组成,每个常量表保存一种常量,如:int型常量表保存的都是int类型的常量,字符串类型常量表保存所有String类型的常量。Java 7 之前共有11种不同的常量表,自 Java 7 开始新增3种常量表。

访问标志位

用于表示某个类或者接口的访问权限及基础属性。

access_flags用于保存Class以及Interface的访问标志,包括Class访问限定类型是public、protected、private中的一种,是否final、abstract的Class等。

java的class文件知识点有哪些

类索引、父类索引以及接口索引

this_class(类索引)用于确定该类的全限定名

super_class(父类)用于确定父类的的全限定名

interfaces(接口索引)用于确定该类实现的所有接口的全限定名。它们的值指向常量池中的对应常量。

成员变量

fields (成员变量)用于保存Class中的所有成员变量,包括static变量和instance变量。

Class中的所有成员变量以一张表格的形式存储,存储了成员变量的访问标志位、变量名索引、变量描述符索引、变量属性等信息。需要注意的是,fields中不会包含从父类中继承来的成员变量。

方法

methods(方法)用于保存Class中声明的所有方法,包括static方法和instance方法。Class中的所有方法也是以一张表格的形式存储,存储的信息也主要是:方法访问标志位、方法名索引、方法描述符索引、方法属性等信息。如果父类的方法没有被子类覆盖,子类的methods中也不会出现父类的方法。

属性

attributes(属性)用于保存Class中成员变量或者方法的详细特有信息。

每个field或者method中都可以包含一个属性表,用于描述该成员变量或者方法的详细信息。属性由多个属性表组成,每个属性表包含一种特定类型的属性。最常见的几个属性类型如下表:

三、文件结构示意图

java的class文件知识点有哪些

到此,关于“java的class文件知识点有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


本文标题:java的class文件知识点有哪些
当前路径:http://cdkjz.cn/article/jhpdps.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220