六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 896|回复: 0

javap的使用

[复制链接]

升级  88%

138

主题

138

主题

138

主题

举人

Rank: 3Rank: 3

积分
464
 楼主| 发表于 2013-2-5 02:45:07 | 显示全部楼层 |阅读模式
                        javap简介
原文网址 http://www.javaresearch.org/article/768.htm.
 也许我们很少会使用到javap工具,因为现在有很多好的反编译工具,但是我在此介绍这个工具不是使用它进行反编译,而是查看java编译器为我们生成的字节码,通过比较字节码和源代码,我们可以发现很多的问题,一个很重要的作用就是了解很多编译器内部的工作机制,在笔者以前的几篇文章中就是借助此工具的,本站有这些文章的原文《深入剖析java类的构造方式》和《使用String还是StringBuffer》。
 下面我们通过具体的一个例子来简单的讲讲这个工具的作用,你不需要很深入的使用,这个简单的介绍和简单的使用就可以使你受益非浅。
 源代码:
class StringTest {    public static void main(String[] args)     {        String result="";        result+="ok";    }} 在反编译前你当然需要先编译这个类了:javac -g StringTest.java(使用-g参数是因为要得到下面javap -l时的输出需要使用此选项)
编译完成后,我们在使用不同的选项看看不同的效果:
1、先看看最简单的不带参数的情况:javap StringTest:
Compiled from StringTest.javaclass StringTest extends java.lang.Object {    StringTest();    public static void main(java.lang.String[]);} 不带参数的情况将答应类的public信息,包括成员和方法
从上面的输出中我们确定了两个知识:如果类没有显示的从其它类派生那么它就是从Object派生;如果没有为类显示的申明构造方法,那么编译器将为之生成一个缺省构造方法(不带参数的构造方法)
2、javap -c StringTest:
<div class="quote_title">输出 写道
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表