第一步(編譯): 創(chuàng)建完源文件之后,程序會(huì)先被編譯為.class文件。Java編譯一個(gè)類時(shí),如果這個(gè)類所依賴的類還沒有被編譯,編譯器就會(huì)先編譯這個(gè)被依賴的類,然后引用,否則直接引用,這個(gè)有點(diǎn)象make。
公司主營業(yè)務(wù):成都網(wǎng)站建設(shè)、做網(wǎng)站、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出中山免費(fèi)做網(wǎng)站回饋大家。
如果java編譯器在指定目錄下找不到該類所其依賴的類的.class文件或者.java源文件的話,編譯器話報(bào)“cant find symbol”的錯(cuò)誤。
第二步(運(yùn)行):java類運(yùn)行的過程大概可分為兩個(gè)過程:1、類的加載 2、類的執(zhí)行。需要說明的是:JVM主要在程序第一次主動(dòng)使用類的時(shí)候,才會(huì)去加載該類。也就是說,JVM并不是在一開始就把一個(gè)程序就所有的類都加載到內(nèi)存中,而是到不得不用的時(shí)候才把它加載進(jìn)來,而且只加載一次。
特別說明:java類中所有public和protected的實(shí)例方法都采用動(dòng)態(tài)綁定機(jī)制,所有私有方法、靜態(tài)方法、構(gòu)造器及初始化方法clinit都是采用靜態(tài)綁定機(jī)制。而使用動(dòng)態(tài)綁定機(jī)制的時(shí)候會(huì)用到方法表,靜態(tài)綁定時(shí)并不會(huì)用到。
擴(kuò)展資料:
Java整個(gè)編譯以及運(yùn)行的過程相當(dāng)繁瑣,本文通過一個(gè)簡單的程序來簡單的說明整個(gè)流程。
Java代碼編譯:是由Java源碼編譯器來完成;
Java字節(jié)碼的執(zhí)行:是由JVM執(zhí)行引擎來完成
Java程序從源文件創(chuàng)建到程序運(yùn)行要經(jīng)過兩大步驟:
1、源文件由編譯器編譯成字節(jié)碼(ByteCode)
2、字節(jié)碼由java虛擬機(jī)解釋運(yùn)行。因?yàn)閖ava程序既要編譯同時(shí)也要經(jīng)過JVM的解釋運(yùn)行,所以說Java被稱為半解釋語言( "semi-interpreted" language)。
Java代碼的編譯與反編譯
2017-02-21Hollis數(shù)盟
一、什么是編譯
1、利用編譯程序從源語言編寫的源程序產(chǎn)生目標(biāo)程序的過程。
2、用編譯程序產(chǎn)生目標(biāo)程序的動(dòng)作。編譯就是把高級語言變成計(jì)算機(jī)可以識(shí)別的2進(jìn)制語言,計(jì)算機(jī)只認(rèn)識(shí)1和0,編譯程序把人們熟悉的語言換成2進(jìn)制的。編譯程序把一個(gè)源程序翻譯成目標(biāo)程序的工作過程分為五個(gè)階段:詞法分析;語法分析;語義檢查和中間代碼生成;代碼優(yōu)化;目標(biāo)代碼生成。主要是進(jìn)行詞法分析和語法分析,又稱為源程序分析,分析過程中發(fā)現(xiàn)有語法錯(cuò)誤,給出提示信息。
二、什么是反編譯
計(jì)算機(jī)軟件反向工程(Reverseengineering)也稱為計(jì)算機(jī)軟件還原工程,是指通過對他人軟件的目標(biāo)程序(可執(zhí)行程序)進(jìn)行“逆向分析、研究”工作,以推導(dǎo)出他人的軟件產(chǎn)品所使用的思路、原理、結(jié)構(gòu)、算法、處理過程、運(yùn)行方法等設(shè)計(jì)要素,某些特定情況下可能推導(dǎo)出源代碼。反編譯作為自己開發(fā)軟件時(shí)的參考,或者直接用于自己的軟件產(chǎn)品中。
三、Java類的編譯與反編譯
我們在最初學(xué)習(xí)Java的時(shí)候,會(huì)接觸到兩個(gè)命令:javac和java,那個(gè)時(shí)候我們就知道,javac是用來編譯Java類的,就是將我們寫好的helloworld.java文件編譯成helloworld.class文件。
class文件打破了C或者C++等語言所遵循的傳統(tǒng),使用這些傳統(tǒng)語言寫的程序通常首先被編譯,然后被連接成單獨(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ì)加入越來越多的語法糖,有些時(shí)候我們想知道Java一些實(shí)現(xiàn)細(xì)節(jié),我們可以借助反編譯。
五、反編譯工具
1、javap
2、Jad:官網(wǎng)(墻裂推薦)
客戶端:
可以在官網(wǎng)下載可執(zhí)行文件,找到對應(yīng)的操作系統(tǒng)的對應(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即可查看源碼
用命令提示符編譯java程序的步驟:
1.先新建文本文檔,輸入自己的java程序。
這里我寫一個(gè)簡單的java程序,來做示范。
import java.util.*;
public class HelloDate{
public static void main(String[] args)
{
System.out.println("Hello,it's:");
System.out.println(new Date());
}
}
2.然后另存為一個(gè)java文件。
1.選擇文件---另存為---名稱為“HelloDate.java”-----選擇“所有文件”。
2.記住自己這個(gè)文件的存儲(chǔ)位置。(方便調(diào)用!)
3.打開程序----附件---命令提示符。
4.由于我的那個(gè)java文本保存在了F:/java/(在F盤下的java文件夾里)下,所以如果要想編譯,就需要先通過命令提示符進(jìn)入java這個(gè)文件夾,具體步驟如下:
1.進(jìn)入F盤:輸入【F:】,然后按下回車鍵【Enter】
2.輸入【cd java】,按下回車鍵【Enter】
這樣就已經(jīng)進(jìn)入了。這里的cd的意思就是進(jìn)入的意思。
5.緊接著調(diào)用java編譯器進(jìn)行編譯。
輸入【javac HelloDate。java】,然后按下回車鍵【Enter】
然后運(yùn)行結(jié)果。
輸入【java HelloDate】,按下回車鍵【Enter】
經(jīng)驗(yàn)總結(jié):運(yùn)行一個(gè)java程序的大概的流程是:
書寫源代碼------編譯-------運(yùn)行----結(jié)束。
注意事項(xiàng):
1.在輸入的時(shí)候一定要注意區(qū)分大小寫。
2.操作之前要保證自己的電腦配置了java的運(yùn)行環(huán)境。
方法/步驟
將java文件寫好,置于目標(biāo)文件夾里面,這里將其放在“D://java/"目錄下,也可以放在任何喜歡的位置。
按下鍵盤上的windows按鈕,或者直接點(diǎn)擊電腦開始按鈕,在”搜索文件框程序“框里填寫”cmd“,點(diǎn)擊回車,進(jìn)入cmd窗口
進(jìn)入窗口后,界面上首先會(huì)顯示”C:\Users\Administrator",在這句語句后面寫上文件所在的盤,進(jìn)入該盤,進(jìn)入下一級目錄只需寫上:cd 文件夾名稱“再按回車,在這里是”cd java“,注意不要漏寫了cd與文件夾名稱之間的空格。
進(jìn)入最后一個(gè)文件夾后,寫上”javac java文件名“再回車,如這里是”javac ?jinyan.java“?;剀囍罂梢赃M(jìn)入目標(biāo)文件卡查看,會(huì)看見一個(gè)后綴名為.class的文件。
再在后面寫上”java 文件名“ 再回車即運(yùn)行成功,如這里寫的"java jinyan",還是注意不要忘記空格。
已經(jīng)編譯過的java文件再次運(yùn)行時(shí)不需要再用javac語句編譯文件,直接用java語句運(yùn)行即可。
cd到你java文件存放的目錄,比如你的java文件的名稱為HelloWorld.java,在cmd中輸入javac HelloWorld.java 敲擊回車.
這個(gè)命令會(huì)將你的java文件編譯成class文件,然后在cmd框中輸入java HelloWorld敲擊回車就能運(yùn)行你的java文件輸出結(jié)果.
java優(yōu)點(diǎn):
java是純面向?qū)ο缶幊痰恼Z言;
平臺(tái)無關(guān)性 (一次編譯,到處運(yùn)行;Write Once,Run Anywhere);
java提供了許多內(nèi)置的類庫,通過這些類庫,簡化了開發(fā)人員的設(shè)計(jì)工作,同時(shí)縮短了項(xiàng)目開發(fā)時(shí)間;
提供了對Web應(yīng)用開發(fā)的支持,例如,Applet,Servlet,和JSP可以用來開發(fā)Web應(yīng)用程序,,Socket,RMI可以用來開發(fā)分布式應(yīng)用程序的類庫。