Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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字节码中的#数字是什么?_Java_Bytecode - Fatal编程技术网

Java字节码中的#数字是什么?

Java字节码中的#数字是什么?,java,bytecode,Java,Bytecode,我编写了一个简单的java源代码,如下所示: public class Main { public static void main(String[] args) { System.out.println("Hello World!"); } } 并使用javap-c命令将其转换为等效字节码 Compiled from "Main.java" public class Main { public Main(); Code: 0:

我编写了一个简单的java源代码,如下所示:

public class Main {    
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}
并使用javap-c命令将其转换为等效字节码

Compiled from "Main.java"
public class Main {
  public Main();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
       3: ldc           #3                  // String Hello World!
       5: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
       8: return
}
从“Main.java”编译而来
公共班机{
公用干管();
代码:
0:aload_0
1:invokespecial#1//方法java/lang/Object。“:()V
4:返回
公共静态void main(java.lang.String[]);
代码:
0:getstatic#2//Field java/lang/System.out:Ljava/io/PrintStream;
3:ldc#3//String你好,世界!
5:invokevirtual#4//方法java/io/PrintStream.println:(Ljava/lang/String;)V
8:返回
}
什么是1、2、3、4、

您何时以及为什么要使用它?

#x
指的是类中的条目。条目的实际值将打印在注释中

要查看常量池,请使用
javap-c-verbose…

如果使用

javap -c -s -verbose Main.class
您将在
常量池
部分获得它们的定义

Constant pool:
 #1 = Methodref          #6.#15         // java/lang/Object."<init>"()V
 #2 = Fieldref           #16.#17        //  
 = String             #18            // Hello World!
#4 = Methodref          #19.#20        // java/io/PrintStream.println:(Ljava/lang/String;)V
#5 = Class              #21            // Main
#6 = Class              #22            // java/lang/Object
#7 = Utf8               <init>
#8 = Utf8               ()V
#9 = Utf8               Code
#10 = Utf8               LineNumberTable
#11 = Utf8               main 
...
常量池:
#1=Methodref#6.#15//java/lang/Object。”“()V
#2=Fieldref#16.#17//
=字符串#18//你好,世界!
#4=Methodref#19.#20//java/io/PrintStream.println:(Ljava/lang/String;)V
#5=类别#21//Main
#6=类#22//java/lang/Object
#7=Utf8
#8=Utf8()V
#9=Utf8代码
#10=Utf8行号表
#11=Utf8主
...