Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JVM堆栈中的局部变量表_Java_Jvm_Local Variables - Fatal编程技术网

Java JVM堆栈中的局部变量表

Java JVM堆栈中的局部变量表,java,jvm,local-variables,Java,Jvm,Local Variables,今天我将一个类编译成字节码,在main方法局部变量表索引0中找不到任何内容,它是从1开始的,我知道一个非静态方法是从1开始的,因为它在0处是“this” 这是字节码 // this is the main method public static void main(java.lang.String[]); Code: 0: iconst_1 1: istore_1 // index: 1 (what is content at index 0 ?

今天我将一个类编译成字节码,在main方法局部变量表索引0中找不到任何内容,它是从1开始的,我知道一个非静态方法是从1开始的,因为它在0处是“this”

这是字节码

  // this is the main method
  public static void main(java.lang.String[]);
    Code:
       0: iconst_1
       1: istore_1   // index: 1 (what is content at index 0 ?)
       2: iconst_2
       3: istore_2
       4: return

  // this is a static method
  public static void staticMethod();
    Code:
       0: iconst_1
       1: istore_0  // index: 0 (no 'this')
       2: iconst_2
       3: istore_1
       4: return

  // this is a non-static method
  public void nonStaticMethod();
    Code:
       0: iconst_1
       1: istore_1  // index: 1  (index 0 should be 'this')
       2: iconst_1
       3: istore_2
       4: return

请帮帮我,谢谢

主方法中索引0处的局部变量是该方法的参数:对字符串[]的引用。根据JVM规范:

Java虚拟机使用局部变量在方法调用时传递参数。在类方法调用时,所有参数都以连续的局部变量的形式传递,从局部变量0开始


主方法中索引0处的局部变量是该方法的参数:对字符串[]的引用。根据JVM规范:

Java虚拟机使用局部变量在方法调用时传递参数。在类方法调用时,所有参数都以连续的局部变量的形式传递,从局部变量0开始


哦,我明白了,非常感谢您的回答:值得注意的是,编译器不需要保留预初始化的变量,因此,由于所讨论的代码既不使用参数也不使用此参数,因此代码可以在所有示例方法中重复使用变量索引零,典型的编译器实现不会这样做。哦,我理解,非常感谢您的回答:值得注意的是,编译器不需要保留预初始化的变量,因此,由于所讨论的代码既不使用参数,也不使用此参数,因此代码可以在所有示例方法中重复使用变量索引零。典型的编译器实现不会这样做。