Java代碼的編譯與反編譯
開平ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
2017-02-21Hollis數(shù)盟
一、什么是編譯
1、利用編譯程序從源語(yǔ)言編寫的源程序產(chǎn)生目標(biāo)程序的過程。
2、用編譯程序產(chǎn)生目標(biāo)程序的動(dòng)作。編譯就是把高級(jí)語(yǔ)言變成計(jì)算機(jī)可以識(shí)別的2進(jìn)制語(yǔ)言,計(jì)算機(jī)只認(rèn)識(shí)1和0,編譯程序把人們熟悉的語(yǔ)言換成2進(jìn)制的。編譯程序把一個(gè)源程序翻譯成目標(biāo)程序的工作過程分為五個(gè)階段:詞法分析;語(yǔ)法分析;語(yǔ)義檢查和中間代碼生成;代碼優(yōu)化;目標(biāo)代碼生成。主要是進(jìn)行詞法分析和語(yǔ)法分析,又稱為源程序分析,分析過程中發(fā)現(xiàn)有語(yǔ)法錯(cuò)誤,給出提示信息。
二、什么是反編譯
計(jì)算機(jī)軟件反向工程(Reverseengineering)也稱為計(jì)算機(jī)軟件還原工程,是指通過對(duì)他人軟件的目標(biāo)程序(可執(zhí)行程序)進(jìn)行“逆向分析、研究”工作,以推導(dǎo)出他人的軟件產(chǎn)品所使用的思路、原理、結(jié)構(gòu)、算法、處理過程、運(yùn)行方法等設(shè)計(jì)要素,某些特定情況下可能推導(dǎo)出源代碼。反編譯作為自己開發(fā)軟件時(shí)的參考,或者直接用于自己的軟件產(chǎn)品中。
三、Java類的編譯與反編譯
我們?cè)谧畛鯇W(xué)習(xí)Java的時(shí)候,會(huì)接觸到兩個(gè)命令:javac和java,那個(gè)時(shí)候我們就知道,javac是用來編譯Java類的,就是將我們寫好的helloworld.java文件編譯成helloworld.class文件。
class文件打破了C或者C++等語(yǔ)言所遵循的傳統(tǒng),使用這些傳統(tǒng)語(yǔ)言寫的程序通常首先被編譯,然后被連接成單獨(dú)的、專門支持特定硬件平臺(tái)和操作系統(tǒng)的二進(jìn)制文件。通常情況下,一個(gè)平臺(tái)上的二進(jìn)制可執(zhí)行文件不能在其他平臺(tái)上工作。而Javaclass文件是可以運(yùn)行在任何支持Java虛擬機(jī)的硬件平臺(tái)和操作系統(tǒng)上的二進(jìn)制文件。
那么反編譯呢,就是通過helloworld.class文件得到j(luò)ava文件(或者說是程序員能看懂的Java文件)
四、什么時(shí)候會(huì)用到反編譯
1、我們只有一個(gè)類的class文件,但是我們又看不懂Java的class文件,那么我們可以把它反編譯成我們可以看得懂的文件。
2、學(xué)習(xí)Java過程中,JDK的每個(gè)版本都會(huì)加入越來越多的語(yǔ)法糖,有些時(shí)候我們想知道Java一些實(shí)現(xiàn)細(xì)節(jié),我們可以借助反編譯。
五、反編譯工具
1、javap
2、Jad:官網(wǎng)(墻裂推薦)
客戶端:
可以在官網(wǎng)下載可執(zhí)行文件,找到對(duì)應(yīng)的操作系統(tǒng)的對(duì)應(yīng)版本,然后進(jìn)行安裝使用。
因?yàn)槲沂褂玫氖莑inux操作系統(tǒng),所以我下載的是Linux版本的工具,這個(gè)工具下載好之后會(huì)有一個(gè)執(zhí)行文件,只要在執(zhí)行文件所在目錄執(zhí)行./jadhelloworld.class就會(huì)在當(dāng)前目錄下生成helloworld.jad文件,該文件里就是我們很熟悉的Java代碼
Eclipse插件:
下載地址在官網(wǎng)下載插件的jar包,然后將jar包放到eclipse的plugins目錄下‘在打開Eclipse,Eclipse-Window-Preferences-Java,此時(shí)你會(huì)發(fā)現(xiàn)會(huì)比原來多了一個(gè)JadClipse的選項(xiàng),單擊,在Pathtodecompiler中輸入你剛才放置jad.exe的位置,也可以制定臨時(shí)文件的目錄。當(dāng)然在JadClipse下還有一些子選項(xiàng),如Debug,Directives等,按照默認(rèn)配置即可?;九渲猛戤吅?,我們可以查看一下class文件的默認(rèn)打開方式,Eclipse-Window-Preferences-General-Editors-FileAssociations我們可以看到class文件的打開方式有兩個(gè),JadClipse和Eclipse自帶的ClassFileViewer,而JadClipse是默認(rèn)的。全部配置完成,下面我們可以查看源碼了,選擇需要查看的類,按F3即可查看源碼
三種方法:
1.在IDE中,如eclipse中寫的Java程序,在點(diǎn)擊保存后eclipse就會(huì)調(diào)用javac編譯程序編譯,編譯文件在當(dāng)前項(xiàng)目的bin目錄下。
2.作為一個(gè)獨(dú)立的文件且沒有定義Java環(huán)境變量,需要在cmd窗口中切換到j(luò)ava bin目錄下執(zhí)行Javac程序,執(zhí)行格式為?????javac 空格 Java源文件;如 javac? C://hello.java;
3.作為一個(gè)獨(dú)立的文件且定義了Java環(huán)境變量,打開cmd窗口,可以在任意目錄輸入javac java源文件,如javac D://hi.java。
擴(kuò)展資料
Java也是一種高級(jí)語(yǔ)言,要讓計(jì)算機(jī)執(zhí)行你撰寫的Java程序,也得通過編譯程序的編譯。但是Java編譯程序并不直接將Java源代碼編譯為相依于計(jì)算機(jī)平臺(tái)的0、1序列,而是將其編譯為字節(jié)碼。
Java源代碼的擴(kuò)展名為.java,經(jīng)過編譯程序編譯之后生成擴(kuò)展名為.class的字節(jié)碼。
要想編譯和運(yùn)行java文件,很簡(jiǎn)單,只需要兩個(gè)命令:
(1)javac:作用:編譯java文件;使用方法: javac Hello.java ,如果不出錯(cuò)的話,在與Hello.java 同一目錄下會(huì)生成一個(gè)Hello.class文件,這個(gè)class文件是操作系統(tǒng)能夠使用和運(yùn)行的文件。
(2)java: 作用:運(yùn)行.class文件;使用方法:java Hello,如果不出錯(cuò)的話,會(huì)執(zhí)行Hello.class文件。注意:這里的Hello后面不需要擴(kuò)展名。
下面舉例說明:
假設(shè)我有一個(gè)Hello.java文件放在D:\javatest 文件夾下。
打開cmd命令窗口,會(huì)出現(xiàn)C:\user\lenovo 這里出現(xiàn)的是系統(tǒng)用戶名,這里我們需要將路徑轉(zhuǎn)移到j(luò)ava文件所在目錄。
緊接著輸入 D:回車,會(huì)出現(xiàn)一下界面:
這時(shí)候我們需要定位到j(luò)ava文件所在目錄(這里是javatest目錄),接著輸入 cd javatest 回車。
此時(shí)進(jìn)入到D:\javatest目錄中,此時(shí)的Hello.java文件就在這里
這時(shí)候我們就可以用javac命令編譯啦,輸入javac Hello.java回車
這里如果沒有任何提示表示編譯成功,此時(shí)打開d:\javatest文件夾你會(huì)發(fā)現(xiàn)此時(shí)多了一個(gè)名為Hello.class的文件,這就是操作系統(tǒng)能夠運(yùn)行的文件。
接著輸入 java Hello回車,你就會(huì)看到文件被運(yùn)行的結(jié)果。
這里有幾個(gè)要注意的問題
第一:Hello.java中的內(nèi)容是一個(gè)類,這個(gè)類的名字與.java文件名字必須完全一致。如果不一致將出錯(cuò)。這里當(dāng)你通過eclipse創(chuàng)建一個(gè)類文件的時(shí)候你就會(huì)理解的更清楚了,這里不贅述。
第二:javac 和 java 命令的使用方法要注意,格式。
第三:要使用這兩命令,必須配置好環(huán)境變量。
當(dāng)前文章:可編譯的java代碼 java 編譯
分享網(wǎng)址:http://jinyejixie.com/article18/dodphdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、ChatGPT、品牌網(wǎng)站建設(shè)、服務(wù)器托管、定制網(wǎng)站、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)