Java类文件格式之特殊字符串_动力节点Java学院整理

  

  

首先说明一下,所谓的特殊字符串出现在类文件中的常量池中,本着循序渐进和减少跨度的原则,首先把类文件中的特殊字符串做一个详细的介绍,然后再回过头来继续讲解常量池只现在我们将重点放在特殊字符串上。特殊字符串包括三种:类的全限定名,字段和方法的描述符,特殊方法的方法名。下面我们就分别介绍这三种特殊字符串。

  

<强>(1)类的全限定名

  

在常量池中,一个类型的名字并不是我们在源文件中看到的那样,也不是我们在源文件中使用的包名加类名的形式。源文件中的全限定名和类文件中的全限定名不是相同的概念。源文件中的全新定名是包名加类名,包名的各个部分之间,包名和类名之间,使用点号分割。如对象类,在源文件中的全限定名是. lang。对象。而类文件中的全限定名是将点号替换成“/?例如,对象类在类文件中的全限定名是java/lang/对象。如果读者之前没有接触过类文件格式,是类文件格式的初学者,在这里不必知道全限定名在类文件中是如何使用的,只需要知道,源文件中一个类的名字,在类文件中是用全限定名表述的只

  

<强>(2)描述符

  

我们知道在一个类中可以有若干字段和方法,这些字段和方法在源文件中如何表述,我们再熟悉不过了。既然现在我们要学习类文件格式,那么我们就要问,一个字段或一个方法在类文件中是如何表述的?在本文中,我们会讨论方法和字段在类文件中的描述。方法和字段的描述符并不会把方法和字段的所有信息全都描述出来,毕竟描述符只是一个简单的字符串只

  

在讲解描述符之前,要先说明一个问题,那就是所有的类型在描述符中都有对应的字符或字符串来对应。比如,每种基本数据类型都有一个大写字母做对应,空白也有一个大写字符做对应。下表是空虚和基本数据类型在描述符中的对应。

  

                                                                                                                                                                                                                                                              

  

基本上都是以类型的首字符变成大写来对应的,其中长和布尔是特例,长类型在描述符中的对应字符是J,布尔类型在描述符中的对应字符是Z只

  

基本类型和空虚在描述符中都有一个大写字符和他们对应,那么引用类型(类和接口,枚举)在描述符中是如何对应的呢?引用类型的对应字符串(注意,引用类型在描述符中使用一个字符串做对应),这个字符串的格式是:

  

<强> 1。“L”, +,类型的全限定名,+,”;“,,

  

注意,这三个部分之间没有空格,是紧密排列的。如对象在描述符中的对应字符串是:Ljava/lang/对象;,,ArrayList在描述符中的对应字符串是:Ljava/lang/ArrayList;,,自定义类com . example。型人在描述符中的对应字符串是:Lcom/例子/人;.

  

我们知道,在Java语言中数组也是一种类型,一个数组的元素类型和他的维度决定了他的类型。比如,在int[]一声明中,变量一个的类型是int[],在int [] [] b声明中,变量b的类型是int[][],在[]c对象声明中,变量c的类型是对象[]。既然数组是类型,那么在描述符中,也应该有数组类型的对应字符串。在类文件的描述符中,数组的类型中每个维度都用一个(代表,数组类型整个类型的对应字符串的格式如下:

  

<强> 1。若干个“[”+,才能,数组中元素类型的对应字符串,,,

  

下面举例来说名只int[]类型的对应字符串是:[我,只int[][]类型的对应字符串是:[[我只对象[]类型的对应字符串是:(Ljava/lang/对象;只对象[][][]类型的对应字符串是:[[[Ljava/lang/对象;.

  

介绍完每种类型在描述符中的对应字符串、下面就开始讲解字段和方法的描述符只

  

字段的描述符就是字段的类型所对应的字符或字符串。如:int我中,字段我的描述符就是我。对象中,字段o的描述符就是Ljava/lang/对象;,双[][]d中,字段d的描述符就是[[d只

  

  

<强> 1。(参数1类型,参数2类型,参数3类型,…)返回值类型,,

Java类文件格式之特殊字符串_动力节点Java学院整理