javap是jdk自带的一个工具,可以反编译,也可以查看java编译器生成的字节码,是分析代码的一个好工具。
javap - Java class文件分解器
分解class文件
摘要:
javap [ options ] class. . .
描述:
javap命令分解一个class文件,它根据options来决定到底输出什么。如果没有使用options,那么javap将会输出包,类里的
protected和public域以及类里的所有方法。javap将会把它们输出在标准输出上。来看这个例子,先编译下面这个类。
-
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后,输出结果如下
-
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,那么输出结果如下
-
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
-
4
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
-
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类和成员,这是默认的
-private 输出所有类和成员
-s 输出内部类型签名
-c 输出分解后的代码,例如,类中每一个方法内,包含java字节码的指令,
-verbose 输出栈大小,方法参数的个数
。。。
http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/javap.html
分享到:
相关推荐
javap 使用说明文档 javap 是 JDK 中的一个命令行工具,主要用于对给定的 class 文件进行反编译,了解 Java 编译器内部的工作机制,并提高程序执行的效率。下面是 javap 的使用说明。 1. javap 的基本用法 javap ...
### javap 使用详解 #### 一、概述 `javap` 是 Java 开发工具包 (JDK) 中的一个重要工具,主要用于反编译 `.class` 文件中的字节码。通过 `javap`,开发者能够深入了解 Java 编译器是如何处理源代码并生成字节码的...
在Windows命令行中使用Java和相关命令如javac(Java编译器)和javap(Java类文件反编译器)是Java开发者的基本技能。为了深入理解这些命令的使用方法,让我们逐步详细地讨论每一个命令的具体用法和相关知识点。 ...
javap2p 技术内幕javap2p 技术内幕javap2p 技术内幕javap2p 技术内幕
javap使用不同的参数可以提供不同详细程度的信息输出。例如,使用-v参数可以输出更详尽的信息,包括类的版本、修饰符、接口等,而使用-c参数可以反编译代码。 通过学习和分析字节码文件,开发者可以更好地理解Java...
这款“javap写的完整记事本”是一个很好的学习资源,对于想要了解如何使用Java Swing构建桌面应用,尤其是涉及文本编辑功能的开发者来说,它可以提供宝贵的实践经验。通过阅读和分析源代码,你可以深入理解Java GUI...
此外,还学习了如何使用`javap`命令来查看字节码文件的具体内容,这对于理解Java程序在底层的运行机制非常重要。 以上就是关于Java运行原理及javap命令运行结果的相关知识点的详细介绍。希望对你有所帮助!
Java 中 javap 命令的使用技巧 javap 命令是 JDK 自带的一个工具,它可以对代码反编译,也可以查看 Java 编译器生成的字节码,对代码的执行过程进行分析,了解 JVM 内部的工作。javap 命令可以将 class 文件反编译...
在这个话题中,我们将深入探讨如何使用`Javap`作为类分解器来解析和理解Java字节码。 首先,让我们了解`Javap`的基本用法。在命令行中,你可以通过以下格式调用`Javap`: ```bash javap [选项] 类名 ``` 其中,`...
标题“ndk开发实战javap签名篇”指向了一个针对使用NDK进行Android应用开发过程中的具体技术实践——使用javap命令来获取Java类的签名信息,并生成相应的C/C++头文件,这对于在C/C++代码中调用Java层的方法是必需的...
2. **javap工具的使用**:详细介绍如何使用`javap`命令,包括基础用法和`-verbose`等高级选项的含义与作用。 3. **JVM指令集**:讲解JVM指令集的主要指令,如ALOAD(加载本地变量)、ICONST(常量加载)、IRETURN...
例如,BitTorrent协议使用了块级校验和(如SHA1)确保数据完整性。 7. **NAT穿透**:由于许多P2P节点可能位于NAT(网络地址转换)之后,直接通信变得复杂。STUN(简单Traversal of UDP through NATs)、TURN...
JavaP7架构师课程
NULL 博文链接:https://bolinyang.iteye.com/blog/1830472
标题:"JavaP2P技术内幕 part4" 描述:"JavaP2P技术内幕太大不能上传,分5部分传递" 从标题和描述中,我们可以提炼出的关键知识点主要围绕JavaP2P技术,即Java对等网络(Peer-to-Peer Network)技术。在IT行业中,...
标题:"JavaP2P技术内幕 part3" 描述:"JavaP2P技术内幕太大不能上传,分5部分传递" 从标题和描述中,我们可以提炼出的关键知识点主要围绕JavaP2P技术,即Java对等网络(Peer-to-Peer Network)技术。P2P技术在...
总的来说,通过上述步骤,开发者可以在Eclipse中快速便捷地使用`javap`命令,深入理解Java代码在JVM中的运行方式,从而提升编程技能和解决问题的能力。对于Java开发者来说,掌握这一技巧是非常有益的。
在`javap-Tool-master`这个压缩包中,很可能包含了一个关于如何使用`javap`工具的示例项目或教程。通过研究这个项目,你可以深入理解`javap`的用法,并学会如何在实际开发中运用它来提升你的编程技能。对于Java...
要使用sbt-javap ,请将以下内容添加到project/plugins.sbt :addSbtPlugin( " org.spire-math " % " sbt-javap " % " 0.0.1 " )用法sbt-javap提供了一项新的SBT任务: javap 。 该命令使用一个类的全限定名,将该...
【标题】:“javap写的一个动态日历” 这个标题表明我们正在讨论一个使用Java编程语言编写的日历程序。`javap`在这里可能被误用,实际上`javap`是Java平台的标准工具,用于反汇编Java类文件,展示字节码和相关的元...