Java类文件 方法表集合

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的公共方法。每个方法都包含了方法的描述符、标志、字节码指令和异常处理程序信息。