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

硅谷探秘者 6000 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 给出了几个方法描述符示例。



评论区
请写下您的评论...
暂无评论...
猜你喜欢
数据结构与算法 5071 递归实现全排列算c++#includeiostreamusingnamespacestd;//交换voidexchange(int*a,inti,intj){if(i==j){return
算法基础 2861 上都有一个getModifiers,这个返回一个int的返回值,代表、属性、的修饰。修饰对应的具体值如下:PUBLIC:1PRIVATE:2PROTECTED:4STATIC
数据结构与算法 3033 简单单链表的增删改查c++classnode{public:intdata;node*next;};#include"node.h"usingnamespacestd;classstack
数据结构与算法 3190 链式栈的出栈入栈操作c++基于双向链表//节点classnode{public:intdata;node*next;node*prev;};//双向链表#include"node.h
数据结构与算法 2488 简单双向链表得增删改查c++classnode{public:intdata;node*next;node*prev;};#include"node.h"classrelink
java基础 3963 asm动态生成getandset1.自定义加载器packageclub.jiajia.test;publicclassMyClassLoaderextendsClassLoader
其他 9585 下的规则:(1)重写必须被重写具有相同的参数列表,返回必须被重写的返回相同或者是返回的子。(2)重写的访问控制修饰不能比被重写更严格(比如一个在父中声明为pu
java基础 3236 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 2021-11  16 2021-12  14 2022-01  7 2022-05  1 2022-08  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1 2024-08  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript 加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。