什么是Java代码的编译与反编译

什么是Java代码的编译与反编译,第1张

Java代码的编译与反编译

2017-02-21Hollis数盟

一、什么是编译

1、利用编译程序从源语言编写的源程序产生目标程序的过程。

2、用编译程序产生目标程序的动作。编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。

二、什么是反编译

计算机软件反向工程(Reverseengineering)也称为计算机软件还原工程,是指通过对他人软件的目标程序(可执行程序)进行“逆向分析、研究”工作,以推导出他人的软件产品所使用的思路、原理、结构、算法、处理过程、运行方法等设计要素,某些特定情况下可能推导出源代码。反编译作为自己开发软件时的参考,或者直接用于自己的软件产品中。

三、Java类的编译与反编译

我们在最初学习Java的时候,会接触到两个命令:javac和java,那个时候我们就知道,javac是用来编译Java类的,就是将我们写好的helloworldjava文件编译成helloworldclass文件。

class文件打破了C或者C++等语言所遵循的传统,使用这些传统语言写的程序通常首先被编译,然后被连接成单独的、专门支持特定硬件平台和 *** 作系统的二进制文件。通常情况下,一个平台上的二进制可执行文件不能在其他平台上工作。而Javaclass文件是可以运行在任何支持Java虚拟机的硬件平台和 *** 作系统上的二进制文件。

那么反编译呢,就是通过helloworldclass文件得到java文件(或者说是程序员能看懂的Java文件)

四、什么时候会用到反编译

1、我们只有一个类的class文件,但是我们又看不懂Java的class文件,那么我们可以把它反编译成我们可以看得懂的文件。

2、学习Java过程中,JDK的每个版本都会加入越来越多的语法糖,有些时候我们想知道Java一些实现细节,我们可以借助反编译。

五、反编译工具

1、javap

2、Jad:官网(墙裂推荐)

客户端:

可以在官网下载可执行文件,找到对应的 *** 作系统的对应版本,然后进行安装使用。

因为我使用的是linux *** 作系统,所以我下载的是Linux版本的工具,这个工具下载好之后会有一个执行文件,只要在执行文件所在目录执行/jadhelloworldclass就会在当前目录下生成helloworldjad文件,该文件里就是我们很熟悉的Java代码

Eclipse插件:

下载地址在官网下载插件的jar包,然后将jar包放到eclipse的plugins目录下‘在打开Eclipse,Eclipse->Window->Preferences->Java,此时你会发现会比原来多了一个JadClipse的选项,单击,在Pathtodecompiler中输入你刚才放置jadexe的位置,也可以制定临时文件的目录。当然在JadClipse下还有一些子选项,如Debug,Directives等,按照默认配置即可。基本配置完毕后,我们可以查看一下class文件的默认打开方式,Eclipse->Window->Preferences->General->Editors->FileAssociations我们可以看到class文件的打开方式有两个,JadClipse和Eclipse自带的ClassFileViewer,而JadClipse是默认的。全部配置完成,下面我们可以查看源码了,选择需要查看的类,按F3即可查看源码

从控制接收字符串

字符串通过分割符号"\s",进行分割转换为字符串数组

将字符串数组中的字符串转为整形,并存放于numbers,并求和。

计算numbers里面整形的平均值

输出numbers里面大于平均值的整数的位置,以及总共有几个。

为什么很多学习Java的人能看懂代码,但自己动手却写不出来?

关于这个问题,想必是很多人都有的心理历程或者是“说辞”,但其实真正的原因并不是你们所说的“我能看懂,但是让我写却写不出来”,真正的原因和问题是在于你当时学习的时候就没有学会,也不懂如何正确的学习Java编程。根据这个问题的具体原因以及如何去破解这样的问题,我今天会在下面跟大家详细说明。

“我能看懂代码,但是让我自己写却写不出来”,这样的话在我刚开始的时候自己也说过,但后来会写代码之后,会发现这样的说法是没过脑子的,也没有仔细去探究一下根本原因是什么,“能看懂”这样的说法可以说是记忆好,或者是对于英语懂一些,类似于背单词,这样当然可以看懂,而学习Java编程是在于用代码写出良好的互联网产品,是自己根本就没有理解代码。当我自己会写代码后,就会觉得自己曾经说的这话非常打脸,真正看懂代码的人,是看懂了业务逻辑是什么,并不是看懂了英文单词,让他去写一个功能,他是可以自己独立敲出来的,这样才是真正的懂。

我觉得写不出来代码有两种情况:

一种就是有思路,但是对于Java这门语言的语法结构不是特别了解,所以代码编写不出来。

一种则是对于Java语言语法结构掌握的还算可以,但是解题却没有思路,我个人认为这样的情况是偏多的,或者说是既对Java语言语法结构掌握的不好,同时也没有思路,这样的情况也比较多。

针对第一种情况,我认为是比较好解决的,自己细心的多看几遍视频,好好掌握以下Java的基础知识就很容易解决,只要自己不懒就没什么问题。

针对第二种情况,应该是每个人在学习过程中都会遇到的难题,往往我们针对一个功能或者一个题目不知道整体的构建思路是什么,这也是学习Java刚开始时比较棘手的问题。我的建议就是“先模仿,后创造”,这是一个慢慢积累的过程,我们在看视频或者书中的代码时,关注点要在别人解题的思路上,这是一个会学习的人必备的技能,并不是把他的代码照抄一遍就行了,每个人都有每个人的学习习惯,自己多整理多归纳,见得多了,慢慢就都有了解题的思路,这跟小学生学习奥数是一个道理,量变引起质变。

心理障碍:

对于刚开始学习Java的小白,可能多多少少都会有一些惧怕写代码的心理障碍。讲实话,刚开始学Java的时候,我回忆以前自己也有过这样的感觉,潜意识在暗示自己不会写,写不出来,然后自己真的就只是光看视频,而不去写代码,这种学习过程中不愿意动手的习惯就会逐渐养成,而学习一项技能往往靠的就是动手实践的能力,这也是导致自己最终不会写代码的一方面因素。

这方面我必须反复的跟大家强调“多思考”“多思考”“多思考”“动手写”“动手写”“动手写”,脑袋和手一个都不能懒,手懒就只剩下理论知识,脑袋懒就只剩下一部麻木复制机器。无论是看视频还是看书,我们看过一个程序的大致思路后,就合上书或者关掉视频,然后按照自己的思路把代码写出来,不要去想视频中的代码每一段是什么,要围绕着我们要解决的问题和要完成什么样的功能,去思考视频中的代码思路是怎么完成的。同时自己脑海中也要回忆,自己曾经写过或者看过哪些类似的程序,模仿着曾经自己接触的程序,最终把完整的代码思路写出来,这才是最正确的学习过程和思路,其实很多人自己是不会学习的,需要别人去引导才能走到正确的道路上,学习习惯这东西是需要漫长的时间培养出来的。

一定要着手去写代码,一个没有大量代码积累的人,是不可能从事Java开发工作的,用道家的一句话:道生一,一生二,二生三,三生万物。程序也是同样的道理,学会第一个程序,才会有第二个程序。写不出来没关系,我们可以先从最简单的开始,由简单到复杂,但一定要有毅力,可以坚持学下去。代码从十行积累到一百行,再到一千行,再到一万行,逐渐递增,当你积累的足够多的时候,你现在所想的自己“能看懂代码,但是不会写”的说辞就不复存在了。

以上就是关于什么是Java代码的编译与反编译全部的内容,包括:什么是Java代码的编译与反编译、java程序 有没有看懂这个程序的 给我讲一下注释行不行、该如何正确学习java看书上的知识点及例子能看懂,接着就记这些点,但自己敲不出代码,该如何入手,是等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10137633.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存