仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3234|回复: 19
打印 上一主题 下一主题

[学习教程] JAVA网页编程之用Javap反编译帮你了解Java特征

[复制链接]
兰色精灵 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:54:25 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
学习JAVA的目的更多的是培养自身的工作能力,我觉得工作能力的一个核心就是:独立思考能力,因为只有独立思考后,才会有自己的见解编译Java开辟职员熟习在一个轮回中利用StringBuffer来取代串连String对象能取得最好功能。但是,多半开辟职员历来没有对照两种办法发生的字节代码的区分。在Java开辟工具包(JDK)中有一个叫做javap的工具能够告知你为何如许做能够取得最好功能。
  
  Javap将一个类和它的办法的一些转储信息输入到尺度输入。该工具不把代码反编译为java源代码,可是它会把字节代码反汇编成为由Java假造机标准界说的字节代码指令。
  
  在你必要检察编译器为你大概给你做了甚么的时分,大概你想要看一处代码的修改对编译后的类文件有甚么影响的时分,javap相称有效。
  
  如今以我们后面提到的StringBuffer和String作为一个例子。上面是一个专门为例子计划的类,它有两个办法,都前往一个由0到n的数字构成的String,个中n由挪用者供应。两个办法独一的区分在于一个利用String构建了局,别的一个利用StringBuffer构建了局。
  
  publicclassJavapTip{
  publicstaticvoidmain(String[]args){}
  privatestaticStringwithStrings(intcount){
  Strings="";
  for(inti=0;i<count;i++){
  s+=i;
  }
  returns;
  }
  privatestaticStringwithStringBuffer(intcount){
  StringBuffersb=newStringBuffer();
  for(inti=0;i<count;i++){
  sb.append(i);
  }
  returnsb.toString();
  }
  }
  如今让我们看看对这个类利用?Cc选项运转javap的输入。-c选项告知javap反汇编在类中碰到的字节代码。
  
  运转体例以下:
  
  >javap-cJavapTip
  
  此命令的输入为:
  
  Methodjava.lang.StringwithStrings(int)
  0ldc#2
  2astore_1
  3iconst_0
  4istore_2
  5goto30
  8new#3
  11dup
  12invokespecial#4
  15aload_1
  16invokevirtual#5
  19iload_2
  20invokevirtual#6
  23invokevirtual#7
  26astore_1
  27iinc21
  30iload_2
  31iload_0
  32if_icmplt8
  35aload_1
  36areturn
  Methodjava.lang.StringwithStringBuffer(int)
  0new#3
  3dup
  4invokespecial#4
  7astore_1
  8iconst_0
  9istore_2
  10goto22
  13aload_1
  14iload_2
  15invokevirtual#6
  18pop
  19iinc21
  22iload_2
  23iload_0
  24if_icmplt13
  27aload_1
  28invokevirtual#7
  31areturn
  假如你之前没有看过Java汇编器,那末这个输入对你来讲就会对照难明,可是你应当能够看到withString办法在每次轮回的时分都新创立了一个StringBuffer实例。然后它将已有的String确当前值追加到StringBuffer上,然后追加轮回确当前值。最初,它对buffer挪用toString并将了局赋给现有的String援用。
  
  withStringBuffer办法与这个办法恰好相反,在每次轮回的时分withStringBuffer只挪用现有StringBuffer的append办法,没有创立新的对象,也没有新的String援用。
  
  在这类情形下,我们已晓得了利用StringBuffer取代String是一种好的做法,可是假如我们不晓得呢?那末javap能够匡助我们找到谜底。在这里你能够看到更具体的关于String,StringBuffer的注释
  
  你其实不会常常必要一个Java反汇编器,可是当你必要的时分,晓得你本人的呆板已有一个而且用法相称复杂的反汇编器固然是一件功德。假如你感乐趣,看书看看javap的别的选项――也许你会发明在你的情况中必要的特征。
你通过从书的数量和开发周期及运行速度来证明:net和ruby要比java简单。
兰色精灵 该用户已被删除
沙发
 楼主| 发表于 2015-6-25 10:08:44 | 显示全部楼层
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-4 19:28

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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