Java查看字节码

我们先写一个HelloWorld.java文件

public class HelloWorld {
  public static void main(String[] args) {
    System.out.println("Hello World!");
  }
}

将HelloWorld.java编译为HelloWorld.class(也可以在eclipse等IDE都有右键以Class文件形式打开查看)

D:\java>javac HelloWorld.java

使用JDK自带的javap命令查看字节码

我们看到,里面有一个构造函数public HelloWorld();,那是因为Java 编译器在编译每个类时都会为该类至少生成一个实例初始化方法--即 "<init>()" 方法,这个init方法就是构造函数的另一个名称,是编译器指定的,但是并不能使用init(), ()V是代表无参函数,默认会帮你return.

#2 是得到System.out这个静态变量,源码是这样的

#3 是常量池中的常量值

#4 调用out的println方法,参数Ljava.lang.String是一个String的入参

实际使用中,如果类过大,可以将字节码输出到文件中再进行查看,下面就是将字节码保存到decompiled.txt文件中

javap -c class文件名 > decompiled.txt

更多javap的参数可以使用javap命令查看

这只是最简单的一个java文件,大家可以尝试在里面进行

HelloWorld helloWorld = new HelloWorld();

再编译查看字节码有什么效果

下面是在UltraEdit查看HelloWorld.class的效果,是16进制的显示形式

我们看到前有咖啡宝贝的标识,说明class字节码是有内置标识的,即使改名了也不会影响里面的内容,其他后面再写.

发布了64 篇原创文章 · 获赞 34 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/svygh123/article/details/103648142