3. 編譯運(yùn)行命令
編譯
javac [-d] [-o] [-verbose] [-classpath][-sourcepath]
-d, 指定生成的.class文件存放目錄,一般省略則默認(rèn)放在java源文件同一目錄下
-o, 這個(gè)選項(xiàng)告訴javac優(yōu)化內(nèi)聯(lián)的static,final以及privite成員函數(shù)所產(chǎn)生的碼空郊。
-verbose份招,此選項(xiàng)告知java顯示出有關(guān)被編譯的源文件和任何被調(diào)用類(lèi)庫(kù)的信息。如-verbose:class能看到各種加載的信息狞甚,-verbose:gc 是garbagecollection 的信息
-classpath锁摔,設(shè)定要用到的類(lèi)路徑,可以是目錄入愧,jar文件鄙漏,zip文件(里面都是class文件)嗤谚,值得注意的是,此classpath中的內(nèi)容是會(huì)覆蓋掉環(huán)境變量CLASSPATH里面的設(shè)定怔蚌。也可以省略巩步,省略則默認(rèn)使用環(huán)境變量$CLASSPATH路徑。
所以一般classpath的設(shè)定都是:當(dāng)前目錄加環(huán)境變量CLASSPATH設(shè)置目錄桦踊,如
javac??-classpath .:$CLASSPATH ???abc.java?java基本類(lèi)一般都在JDK環(huán)境變量$CLASSPATH中指定好路徑了
自己需要用到的第三方類(lèi)一般都放在文件當(dāng)前目錄下椅野,用.指定路徑即可
若自己需要添加一些類(lèi)可以在.:$CLASSPATH后面添加“:類(lèi)的具體路徑”。
-sourcepath籍胯, 設(shè)定要編譯的java文件路徑竟闪,可以是目錄,jar文件杖狼,zip文件(里面都是java文件)炼蛤。
若編譯的是jar包中的主類(lèi)文件abc.java時(shí),一般編譯整個(gè)包javac edu.test.jar或者包文件夾javac ./edu/test蝶涩。
一般當(dāng)java文件中有多個(gè)需要編譯時(shí)理朋,可以逐一列出,也可以將文件名列在一個(gè)文件中绿聘,名稱(chēng)間用空格或者回車(chē)行來(lái)進(jìn)行分隔嗽上,然后在命令行中使用該列表名,名字前冠以@字符熄攘,如:
javac @usr/test/sourcefile.list???????????? 目錄usr/test 下的sourcefile.list
說(shuō)明
1)一般兽愤,對(duì)于只有一個(gè)出口主函數(shù)main,其他java文件是以?xún)?nèi)聯(lián)類(lèi)的形式被主函數(shù)調(diào)用的多個(gè)java文件組成的工程來(lái)說(shuō)挪圾,編譯時(shí)只需要對(duì)出口主函數(shù)main所在java文件編譯即可浅萧,工程中的其他java文件會(huì)自動(dòng)關(guān)聯(lián)編譯。
2)對(duì)于程序中調(diào)用到了第三方類(lèi)或者package的情況洛史,則一般先需要在程序文件中加入import第三方類(lèi)或者jar包.*? 如
import edu.test.abc? 引用jar包edu.test下的abc.java惯殊,如果直接引用文件夾的話,則是edu/test文件夾下的abc.java文件也殖。為穩(wěn)妥土思,一般都引用整個(gè)包內(nèi)文件import edu.test.*。
(jar包名對(duì)應(yīng)文件夾路徑忆嗜,將某個(gè)路徑文件夾下的所有java文件進(jìn)行打包即為jar包己儒,引用時(shí)可以直接引用文件夾)
編譯時(shí)需要將jar包路徑或者文件夾根目錄,如edu的路徑加入到classpath中捆毫。一般常把jar包或者根文件夾拷貝到當(dāng)前目錄下闪湾,指定classpath為.,編譯器自動(dòng)會(huì)從當(dāng)前目錄開(kāi)始尋找绩卤。
運(yùn)行
java [-classpath] [-sourcepath]
-classpath和編譯時(shí)一致途样,指定運(yùn)行時(shí)要搜索的類(lèi)路徑江醇。需要注意的是,由于所要執(zhí)行的類(lèi)也是要搜索的類(lèi)的一部分何暇,所以一定要把這個(gè)類(lèi)的路徑也放到classpath設(shè)置里陶夜,故在要執(zhí)行的類(lèi)的路徑里執(zhí)行java命令時(shí),一定要加上.表示當(dāng)前目錄也搜索裆站。
-sourcepath 指需要運(yùn)行的目標(biāo)文件名(不要后綴名)条辟,如編譯javac a.java則運(yùn)行java a。若運(yùn)行的是jar包中的主類(lèi)文件時(shí)需要指出包路徑并要在class名前帶上完整的包名宏胯,如java edu,test.abc羽嫡。且該包的根目錄(edu所在文件夾路徑)需要包含在classpath中。
說(shuō)明:
1)文件搜索時(shí)肩袍,系統(tǒng)只會(huì)向下杭棵,從指定目錄向其子目錄搜索,不會(huì)溯源向其父祖目錄搜索了牛。
2)運(yùn)行時(shí)颜屠,classpath應(yīng)同時(shí)包含執(zhí)行的目錄和調(diào)用類(lèi)的目錄辰妙,一般兩者放在同一根目錄下鹰祸,運(yùn)行時(shí)在根目錄下運(yùn)行。不然會(huì)出現(xiàn)錯(cuò)誤找不到運(yùn)行的main函數(shù)密浑。如
調(diào)用的類(lèi)文件./com/bao/ws/h.class蛙婴,執(zhí)行文件為./com/bao/bs/a.class,classpath應(yīng)包含.路徑