asm类型描述符和方法描述符

硅谷探秘者 4315 0 0

1.内部名

        在许多情况下,一种类型只能是类或接口类型。例如,一个类的超类、由一个类实现的接口,或者由一个方法抛出的异常就不能是基元类型或数组类型,必须是类或接口类型。这些类型在已编译类中用内部名字表示。一个类的内部名就是这个类的完全限定名,其中的点号用斜线代替。

例如,String 的内部名为 java/lang/String。


2.类型描述符

        内部名只能用于类或接口类型。所有其他 Java 类型,比如字段类型,在已编译类中都是用 


类型描述符表示的(见图   2.2)。








Java 类型

类型描述符









boolean

Z




char

C




byte

B




short

S




int

I




float

F




long

J




double

D




Object

Ljava/lang/Object;




int[]

[I




Object[][]

[[Ljava/lang/Object;


2‐2





一些 Java 类型的类型描述符






        基元类型的描述符是单个字符:Z 表示 boolean,C 表示 char,B 表示 byte,S 表示 short,

 

        表示 int,F 表示 float,J 表示 long,D 表示 double。一个类类型的描述符是这个类的内部名,前面加上字符 L ,后面跟有一个分号。例如, String 的类型描述符为Ljava/lang/String;。而一个数组类型的描述符是一个方括号后面跟有该数组元素类型的描述符。


3.方法描述符

        方法描述符是一个类型描述符列表,它用一个字符串描述一个方法的参数类型和返回类型。

        方法描述符以左括号开头,然后是每个形参的类型描述符,然后是一个右括号,接下来是返回类型的类型描述符,如果该方法返回 void,则是 V(方法描述符中不包含方法的名字或参数名)。

源文件中的方法声明

方法描述符



void m(int i, float f)

(IF)V

int m(Object o)

(Ljava/lang/Object;)I

int[] m(int i, String s)

(ILjava/lang/String;)[I

Object m(int[] i)

([I)Ljava/lang/Object;



2.3   方法描述符举例

        一旦知道了类型描述符如何工作,方法描述符的理解就容易了。例如,(I)I 描述一个方法,它接受一个 int 类型的参数,返回一个 int。图 2.3 给出了几个方法描述符示例。


猜你喜欢
数据结构与算法 3935 递归实现全排列算c++#includeiostreamusingnamespacestd;//交换voidexchange(int*a,inti,intj){if(i==j){return
算法基础 177 上都有一个getModifiers,这个返回一个int的返回值,代表、属性、的修饰。修饰对应的具体值如下:PUBLIC:1PRIVATE:2PROTECTED:4STATIC
数据结构与算法 1743 简单单链表的增删改查c++classnode{public:intdata;node*next;};#include"node.h"usingnamespacestd;classstack
数据结构与算法 1113 简单双向链表得增删改查c++classnode{public:intdata;node*next;node*prev;};#include"node.h"classrelink
数据结构与算法 2157 链式栈的出栈入栈操作c++基于双向链表//节点classnode{public:intdata;node*next;node*prev;};//双向链表#include"node.h
java基础 2134 asm动态生成getandset1.自定义加载器packageclub.jiajia.test;publicclassMyClassLoaderextendsClassLoader
其他 8477 下的规则:(1)重写必须被重写具有相同的参数列表,返回必须被重写的返回相同或者是返回的子。(2)重写的访问控制修饰不能比被重写更严格(比如一个在父中声明为pu
java基础 1800 asm实例对象的调用1.需要的jar包2.我们需要通过asm生成的目标如下:packageclub.jiajia.test3;publicclassExamp5
归档
2018年11月  12 2018年12月  33 2019年01月  28 2019年02月  28 2019年03月  32 2019年04月  27 2019年05月  33 2019年06月  6 2019年07月  12 2019年08月  12 2019年09月  21 2019年10月  8 2019年11月  15 2019年12月  25 2020年01月  9 2020年02月  5 2020年03月  16 2020年04月  4 2020年06月  1 2020年07月  7 2020年08月  13 2020年09月  9 2020年10月  5 2020年12月  3 2021年01月  1 2021年02月  5 2021年03月  7 2021年04月  4 2021年05月  4 2021年06月  1 2021年07月  7 2021年08月  2 2021年09月  8 2021年10月  9
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议
目录
祝愿神州十三飞行乘组平安归来