Java类文件的方法表集合(Methods)存储了所有方法的信息,包括方法名、修饰符、返回值类型、方法参数等。方法表集合在Java类文件的结构中位于字段表集合之后,由method_count(u2类型)和method_info(method_count个method_info类型)两部分组成,其中每个method_info类型包括以下信息:
access_flags:方法的访问标志,与类访问标志类似,用于描述方法的访问权限、作用域等信息。
name_index:常量池中常量的索引,指向方法名。
descriptor_index:常量池中常量的索引,指向方法描述符,即返回值类型和参数类型的描述符。
attributes_count:方法属性表集合的数量。
attributes:方法属性表集合,用于存储方法的附加信息,比如方法的异常表、方法的注解、方法的代码实现等。
下面是一个包含方法表集合的Java类文件示例:
Classfile /path/to/MyClass.class
Last modified Feb 15, 2023; size 1033 bytes
MD5 checksum 9b7e1f8d56b7c62df19ef873f317c648
Compiled from "MyClass.java"
public class MyClass {
public MyClass();
descriptor: ()V
flags: ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 1: 0
public void myMethod(int);
descriptor: (I)V
flags: ACC_PUBLIC
Code:
stack=2, locals=2, args_size=2
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: iload_1
4: invokevirtual #3 // Method java/io/PrintStream.println:(I)V
7: return
LineNumberTable:
line 3: 0
line 4: 7
}
这个示例包含了一个名为MyClass的公共类,有两个方法:一个构造方法和一个名为myMethod的公共方法。每个方法都包含了方法的描述符、标志、字节码指令和异常处理程序信息。