




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
昨天大D说让我写下DJ入门的基础,今天写了一大半了,结果不小心把浏览器给关掉了,伤心死了,本来里面请了点JAVA知道的,但是现在就不讲了,下次有时间再讲吧,在公司不好弄,今天就只请DJ了. 话说回来,先看图: 其中代码区是DJ反编译出来的源码, 方法列表区是在这个类里所有的方法的列表,双击后会在代码区进入该方法的区域,快捷键区我们用不着,因为那些是把这个当作IDE才用的着的,比如写JAVA程序啦. 下面我们请下这个怎么用,首先我们用DJ写段小程序看看, 打开记事本,加入以下代码 public class b public static void main(String args) int i=5,n= Integer.parseInt(args0); /定义整形变量i=5,n=从命令行输入的参数 booleanflag=in ? true:false; /定义boolean型变量flag.并用三目运算符计算flag的值,如果i大于n,flag值为true,如果i不大于n,flag值为false System.out.println(flag); /输出flag的值 保存到D盘,存为b.java 打开命令提示符,输入d: javac b.java java b 8 java b 3 注意:每句都要回车 运算结果 b后面的数字是给程序传数进去,我们的n就是读的这个参数 下面我用用DJ反编译b.class,这个文件和b.java在一个目录里,当我们用javac b.java时就会生成这个文件,java b全写应该是java b.class,但是后面的后缀可以省略,前面的.java不能省. 用UltraEdit-32打开: 看不懂吧,说实话,要是把这个看懂也不难,但如果里面有中文那就难懂了. 下面再用我们的DJ打开: 代码反编译出来后和我们原来的不一样吧,多了一个public b(),其实这个不是多的,每个类都要有一个和自己类名相同的构造方法,只是我们没写而已, 下面的main函数里也和我们原来写的不一样了, 我们原来的int i=5变成了byte byte0 = 5; /其实这个无所谓了,因为每个我们的i值为5,用不着int型的,用byte就够了,这是JAVA给我们优化的. 下面n的值在这里变成了i的值,这个都无所谓的,因为JAVA编译成字节码后算的是顺序,名字无所谓. 后面的三目运算符也差不多的.输出函数都一样的了.那大家在想了,这样有什么用呢,我们把他反编译成了源码也用不着啊,HALO里根本看不到这样的东西,全是字节码. 下面说到正题了,在DJ里,settings-Decompiler settings,在弹出的窗口中选中Generate JVM instructions as comments(annotete),然后点OK,再按F5刷新 如图: 第句源码下面的/开头的都是上面的语句的字节码.比如 byte byte0 = 5; / 0 0:iconst_5 / 1 1:istore_1 源码是byte byte0=5; 字节码是 /0 0:iconst_5; /1 1:istore_1; 大家看到了,这里面都是以0开始计数,但是HALO里是以1开始计数的 下图: 所以大家在删代码的时候,如果DJ里是5,那么大HALO里就要5+1=6.切记. 大家又想问,这iconst_5,istore_1是啥意思呢? iconst_5将int型5推送至栈顶 istore_1将栈顶int型数值存入第二个本地变量(网上都说是第一个) 不知道为什么是第二个,而不是第一?难道也从0开始,在网上查了下都说是第一个,而我的那个JVM指令集说是第二个,不管这个了,这只是相变量索引值,看下面的代码还能看到istore_2,istore_3之类的,这些是索引,不是真正的值. boolean flag = byte0 i; / 7 9:iload_1 / 8 10:iload_2 / 9 11:icmple 18 / 10 14:iconst_1 / 11 15:goto 19 / 12 18:iconst_0 / 13 19:istore_3 这段是三目运算符的代码,iload_1,iload_2;是取出istore_1和istore_2索引变量取出,就是上面的那个命令存进去的索引值. 然后icmple相当于if,他会拿栈顶的两个值进行比较,就是iload_1,iload_2中的两个值,如果小于等于0就跳转,就是goto下面的语句,goto相当于else,这句话的意思就是,拿两个值比较,如果iload_1中的值大于iload_2的值就往下执行icmple后的语句,然后跳过goto后面的语句,如果小于就跳过下语句,而执行goto下面的语句.大家看到icmple下面的iconst_1了吧,这句就是给int赋值为1,boolean是true,这下大家知道为什么那些XX教程里为什么留两中都有这句了吧,知道这句goto下面的iconst_0大家应该也猜到是false了吧, istore_3是把变量存入第3个变量(icmple和goto各一句,这句不属于goto,不管icmple和goto执行了哪一个,都会执行这一句,这句是将判断的值存进栈的).然后下面的 System.out.println(flag); / 14 20:getstatic #3 / 15 23:iload_3 / 16 24:invokevirtual #4 / 17 27:return 是打印语句, getstatic获取指定类的静态域,并将其值压入栈顶 这句是装System.out这个静态方法取出, iload_3将刚才存入的那个值取出来,下面的invokevirtual #4
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 矿山智能化开采中无人作业技术智能化数据分析与应用报告
- 企业集团账户管理办法
- 临时培训学员管理办法
- 保定爆竹烟花管理办法
- 2025年家具制造业个性化定制生产模式下的个性化设计软件应用报告
- 住宅新建项目管理办法
- 信息设备保密管理办法
- 云南花卉繁殖管理办法
- 临安社保征缴管理办法
- 企业员工出勤管理办法
- 哈尔滨市普通住宅小区物业服务等级指导标准
- 汉语文化传播研究:以中国语言文化为视角
- 电梯电气装置绝缘电阻检测记录
- 医疗机构消防安全管理
- 食堂食品安全应急处置方案
- 退出中华人民共和国国籍申请表
- 西方经济学(第二版)完整整套课件(马工程)
- 检验科安全管理制度汇总
- 英语音标拼读方法讲解
- MT 113-1995煤矿井下用聚合物制品阻燃抗静电性通用试验方法和判定规则
- GB/T 16841-2008能量为300 keV~25 MeV电子束辐射加工装置剂量学导则
评论
0/150
提交评论