数码知识屋
霓虹主题四 · 更硬核的阅读氛围

字节码方法签名怎么看?一文讲清楚

发布时间:2025-12-24 11:00:25 阅读:94 次

字节码方法签名长啥样

你在反编译 Java class 文件时,是不是经常看到一堆像咒语一样的字符?比如 Ljava/lang/String;[I)V 这种。别慌,这就是字节码里的方法签名,虽然看起来怪,但其实有规律可循。

方法签名的结构拆解

一个完整的方法签名在字节码里是这样表示的:(参数类型)返回值类型。括号里面是参数列表,按顺序写;括号外是返回类型。没有返回值就是 V,对应 void。

比如这个签名:(Ljava/lang/String;I)V,它代表的是:接受一个字符串和一个整数,没有返回值的方法。

基本类型的缩写

Java 基本类型在字节码里都有单字母代号:

  • I → int
  • Z → boolean
  • B → byte
  • S → short
  • J → long
  • F → float
  • D → double
  • C → char
  • V → void(仅用于返回值)

对象和数组怎么表示

对象类型以 L 开头,类名用 / 分隔,最后以 ; 结尾。比如:

Ljava/lang/String;

这表示 java.lang.String 类型。

数组用 [ 表示,每多一维就多一个 [。比如:

[I      // int[]
[[Ljava/lang/Object;  // Object[][]

举个实际例子

假设你有这样一个方法:

public static void printInfo(String name, int age, String[] hobbies)

它对应的字节码方法签名就是:

(Ljava/lang/String;I[Ljava/lang/String;)V

从左到右依次是:String 参数、int 参数、String 数组参数,返回 V 表示 void。

在哪能看到这些签名

你可以用 javap 命令查看 class 文件的字节码信息。比如:

javap -s YourClass.class

加上 -s 参数后,输出里就会显示每个方法的签名。在调试混淆代码、分析第三方库或者做字节码增强时,这个技能特别实用。

下次再看到那一串奇怪字符,别懵,拆开看看,其实它只是在老老实实告诉你:这方法要啥,又回啥。