zoukankan      html  css  js  c++  java
  • javap

    本词条缺少概述信息栏名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!
    javap是jdk自带的一个工具,可以反编译,也可以查看java编译器生成的字节码,是分析代码的一个好工具。
    javap - Java class文件分解器
    分解class文件
    摘要:
    javap [ options ] class. . .
    描述:
    javap命令分解一个class文件,它根据options来决定到底输出什么。如果没有使用options,那么javap将会输出包,类里的protected和public域以及类里的所有方法。javap将会把它们输出在标准输出上。来看这个例子,先编译下面这个类。
    Java代码
    import java.awt.*;
    import java.applet.*;
    public class DocFooter extends Applet {
    String date;
    String email;
    public void init() {
    resize(500,100);
    date = getParameter("LAST_UPDATED");
    email = getParameter("EMAIL");
    }
    public void paint(Graphics g) {
    g.drawString(date + " by ",100, 15);
    g.drawString(email,290,15);
    }
    }
    在命令行上键入javap DocFooter后,输出结果如下
    Java代码
    Compiled from DocFooter.java
    public class DocFooter extends java.applet.Applet {
    java.lang.String date;
    java.lang.String email;
    public DocFooter();
    public void init();
    public void paint(java.awt.Graphics);
    }
    如果加入了-c,即javap -c DocFooter,那么输出结果如下
    Java代码
    Compiled from DocFooter.java
    public class DocFooter extends java.applet.Applet {
    java.lang.String date;
    java.lang.String email;
    public DocFooter();
    public void init();
    public void paint(java.awt.Graphics);
    }
    Method DocFooter()
    0 aload_0
    1 invokespecial #1
    return
    Method void init()
    0 aload_0
    1 sipush 500
    4 bipush 100
    6 invokevirtual #2
    9 aload_0
    10 aload_0
    11 ldc #3
    13 invokevirtual #4
    16 putfield #5
    19 aload_0
    20 aload_0
    21 ldc #6
    23 invokevirtual #4
    26 putfield #7
    29 return
    Method void paint(java.awt.Graphics)
    0 aload_1
    new #8
    4 dup
    5 invokespecial #9
    8 aload_0
    9 getfield #5
    12 invokevirtual #10
    15 ldc #11
    17 invokevirtual #10
    20 invokevirtual #12
    23 bipush 100
    25 bipush 15
    27 invokevirtual #13
    30 aload_1
    31 aload_0
    32 getfield #7
    35 sipush 290
    38 bipush 15
    40 invokevirtual #13
    43 return
    当然,如果想分析这个文件,可以讲输出结果输出到一个文件里。可以这样写
    javap -c DocFooter > F://test.txt
    这样就会输出到F盘的test.txt文件中了。
    选项:
    -help 帮助
    -l 输出行和变量的表
    -public 只输出public方法和域
    -protected 只输出public和protected类和成员
    -package 只输出包,public和protected类和成员,这是默认的
    -p -private 输出所有类和成员
    -s 输出内部类型签名
    -c 输出分解后的代码,例如,类中每一个方法内,包含java字节码的指令,
    -verbose 输出栈大小,方法参数的个数
    -constants 输出静态final常量
  • 相关阅读:
    NodeJS爬虫入门
    JavaScript 中运算优先级问题
    Express + Session 实现登录验证
    C# Func,Action,Predicate的区别
    xaml页面和viewmodel之间接收绑定的参数,也可以称为事件里动态传入用户自定义参数
    Windows下使用自带certutil工具校验文件MD5、SHA1、SHA256
    async await总结
    带圆角的图片显示
    wpf style BaseOn 不能使用DynamicResource,必须使用StaticResource来指明
    javascript 模板里内容的换行拼接,可以使用反单引号,ESC下面的那个按键
  • 原文地址:https://www.cnblogs.com/isoftware/p/3801329.html
Copyright © 2011-2022 走看看