想要查看.class字节码的同学,可以使用 javap 这个命令
以windows系统为例
如test.Test.java类如下
package test;
public class Test
{
public static void main(String[] args)
{
String str = "abc";
int len = str.length;
System.out.println(Test.class.getName());
}
}
编译如下
下面使用 javap -v 查看字节码结构
我这里主要想告诉大家我用蓝线标注的部分是什么意思,大多人第一次看到这个截图里 带什么()V,()I的可能都晕了。下面给大家解释下
这个文件的其他部分的讲解我不在赘述网上可以查到很多
列如参考:https://www.cnblogs.com/royi123/p/3569926.html
#1 = Methodref #8.#17 // java/lang/Object."<init>":()V
这里表示要调用 java.lang.Object 的 init 方法 ,()表示这个方法的参数为空,V(void熟悉c语言的人一定很熟悉 如:void main(void))表示返回值为空.
#3 = Methodref #19.#20 // java/lang/String.length:()I
这句表示要调用 java.lang.String 的 length 方法 ,()表示入参为空,I(Integer,int) 表示返回值为一个整形 .
#6 = Methodref #24.#25 // java/lang/Class.getName:()Ljava/lang/String;
这句表示要调用java.lang.Class 的 getName 方法 ,()表示入参为空,
Ljava/lang/String 表示返回值是一个String.
#7 = Methodref #26.#27 // java/io/PrintStream.println:(Ljava/lang/String;)V
这句表示要调用java.io.PrintStream的println方法,(Ljava/lang/String;)表示入参为一个String. V表示返回值为空.
如有错误谢谢指正,谢谢观看。