我是靠谱客的博主 神勇芒果,最近开发中收集的这篇文章主要介绍javap 初使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

什么是 javap

javap 是 JDK 自带的反汇编器,可以查看 java 编译器为我们生成的字节码。通过它,我们可以对照源代码和字节码,从而了解很多编译器内部的工作。

百度百科:
javap 是 Java class 文件分解器,可以反编译,也可以查看 java 编译器生成的字节码。用于分解 class 文件。

使用 javap

首先自己实现一个简单的类,如下:

package kaven;

public class StartJavaP {

    private static Integer number;
    private static final Integer MAX = 100;

    public static void main(String[] args){

        Integer sum = 0;
        Integer i =0;
        while(i < MAX){
            sum += i;
            i++;
        }
        System.out.println(sum);
    }
}

打开 cmd ,cd 到存放这个类的路径上,再用 javac 编译这个类。

C:UsersKaven>cd
C:UsersKaven

C:UsersKaven>f:

F:>cd F:InstallCompilerWorkspaceIDEAMyJavaPsrckaven

F:InstallCompilerWorkspaceIDEAMyJavaPsrckaven>javac StartJavaP.java

编译成功,如下图,多了 StartJavaP.class文件:
在这里插入图片描述

再使用 javap -c StartJavaP.class(其他博客说不加 .class 也可以,但是我这里好像不行 )。

F:InstallCompilerWorkspaceIDEAMyJavaPsrckaven>javap -c StartJavaP.class

生成如下字节码:

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

  public static void main(java.lang.String[]);
    Code:
       0: iconst_0
       1: invokestatic  #2                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       4: astore_1
       5: iconst_0
       6: invokestatic  #2                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       9: astore_2
      10: aload_2
      11: invokevirtual #3                  // Method java/lang/Integer.intValue:()I
      14: getstatic     #4                  // Field MAX:Ljava/lang/Integer;
      17: invokevirtual #3                  // Method java/lang/Integer.intValue:()I
      20: if_icmpge     56
      23: aload_1
      24: invokevirtual #3                  // Method java/lang/Integer.intValue:()I
      27: aload_2
      28: invokevirtual #3                  // Method java/lang/Integer.intValue:()I
      31: iadd
      32: invokestatic  #2                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      35: astore_1
      36: aload_2
      37: astore_3
      38: aload_2
      39: invokevirtual #3                  // Method java/lang/Integer.intValue:()I
      42: iconst_1
      43: iadd
      44: invokestatic  #2                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      47: dup
      48: astore_2
      49: astore        4
      51: aload_3
      52: pop
      53: goto          10
      56: getstatic     #5                  // Field java/lang/System.out:Ljava/io/PrintStream;
      59: aload_1
      60: invokevirtual #6                  // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      63: return

  static {};
    Code:
       0: bipush        100
       2: invokestatic  #2                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       5: putstatic     #4                  // Field MAX:Ljava/lang/Integer;
       8: return
}

这样就说明反编译成功了。

最后

以上就是神勇芒果为你收集整理的javap 初使用的全部内容,希望文章能够帮你解决javap 初使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部