快速业务通道

深入Java编程:Java的字节代码 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
ug 为true,“Debug mode is on”还是打印不出来。答案在字节编码中 。运行javap分析EternallyConstant类,可看到如下结果:

Compiled from EternallyConstant.java public class  EternallyConstant extends java.lang.Object {     public  EternallyConstant();     public static void main (java.lang.String[]); } Method EternallyConstant()    0 aload_0    1 invokespecial #1 <Method  java.lang.Object()>    4 return Method void  main(java.lang.String[])    0 getstatic #2 <Field  java.io.PrintStream out>    3 ldc #3 <String  "EternallyConstant beginning execution">    5  invokevirtual #4 <Method void println(java.lang.String)>    8 getstatic #5 <Field boolean log>   11 ifeq  22   14 getstatic #2 <Field java.io.PrintStream  out>   17 ldc #6 <String "Logging mode is  on">   19 invokevirtual #4 <Method void println (java.lang.String)>   22 return

很奇怪吧!由于 有“ifep”检测log字段,代码一点都不检测debug字段。因为debug字 段被标记为final ,编译器知道debug字段在运行过程中不会改变。所以 “if”语句被优化,分支部分被移去了。这是一个非常有用的优化, 因为这使你可以在引用程序中嵌入调试代码,而设置为false时不用付出代价,不 幸的是这会导致编译混乱。如果改变了final字段,记住重新编译其它引用该字段 的类。这就是引用有可能被优化的原因。Java开发工具不是每次都能检测这个细 微的改变,这些可能导致临时的非常程序错误。在这里,古老的C++格言对于Java 环境来说一样成立:“每当迷惑不解时,重新编译所有程序“。

深入Java编程:Java的字节代码(6)

时间:2011-09-04 comprg.com.cn

四、利用第三方工具反编译Java字节代码

以上介绍了利用javap来 分析Java字节代码,实际上,利用第三方的工具,可以直接得到源代码。这样的 工具有很多,其中NMI''s Java Code Viewer (NJCV)是其中使用起来比较方便的一 种。

1.NMI''s Java Code Viewer简介

NJCV针对编译好的Java字节 编码,即.class文件、.zip或.jar文件。.jar文件实际上就是.zip文件。利用 NJCV这类反编译工具,可以进一步调试、监听程序错误,进行安全分析等等。通 过分析一些非常优秀的Java代码,我们可以从中学到许多开发Java程序的技巧。

NMI''s Java Code Viewer 的最新版本是4.8.3,而且只能运行在以下 Windows平台:

l Windows 95/98

l Windows 2000

l Windows NT 3.51/4.0

2. NMI''s Java Code Viewer应用实例

我们以前面例举到的ExampleOfByteCode.class作为例子。打开File菜单 中的open菜单,打开Java字节代码文件,Java class files中列出了所有与该文 件在同一个目录的文件。选择要反编译的文件,然后在Process菜单中选择 Decompile或Dissasemble,反编译好的文件列在Souce-code files一栏。用NMI''s Java Code Viewer提供的Programmer’s File Editor打开该文件,瞧,源 代码都列出来了。

// Processed by NMI''s Java Code  Viewer 4.8.3 © 1997-2000 B. Lemaire // Website:  http://njcv.htmlplanet.com  E-mail : info@njcv.htmlplanet.com // Copy registered to Evaluation Copy // Source File  Name:   ExampleOfByteCode.java import  java.io.PrintStream; public class ExampleOfByteCod

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号