自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

深入理解CLASSPATH

開發(fā) 后端
類路徑,也就是CLASSPATH是 Java™ 對Java初學(xué)者來說是最復(fù)雜也最令人頭痛的部分之一,但熟練掌握類路徑對成為一名專業(yè) Java 程序員來說卻又十分關(guān)鍵。在本文中,Elliotte Rusty Harold 為您闡述了類路徑和源路徑的復(fù)雜性,并向您展示了如何在 Windows 中熟練掌握它們。

通過類路徑可以連接 Java 運(yùn)行庫和文件系統(tǒng)。它告訴編譯器和解釋器應(yīng)該在何處查找要加載的 .class 文件。它的基本思想是:文件系統(tǒng)的層次結(jié)構(gòu)反映了 Java 包的層次結(jié)構(gòu),而類路徑則定義了文件系統(tǒng)中的哪個目錄可以作為 Java 包層次結(jié)構(gòu)的根。

遺憾的是,通常文件系統(tǒng)非常復(fù)雜并依賴于平臺,而且和 Java 包也不能很好地匹配。尤其是在 Windows 環(huán)境中更是如此。Java 是一些 Unix 高手設(shè)計的,因而從很多方面來說,這也就意味著它無法很好地與 Windows 約定同步。這樣一來,不論是新用戶還是資深 Java 程序員都深感類路徑的棘手。沒錯,它的確不是 Java 平臺好的一面,它讓您到了下班的時候還在忙于調(diào)試一個頑固的小問題。

當(dāng)然采用 Eclipse 這樣的優(yōu)秀 IDE 可以減少管理類路徑的一些困難,但只能說是一些,而且前提還必須是一切都正常(但這不大可能,因?yàn)榭倳幸恍┮馔獬霈F(xiàn))。因此,每個 Java 程序員都必須要全面了解類路徑,惟有如此,才有希望調(diào)試類路徑中所出現(xiàn)的問題。

包結(jié)構(gòu)

要掌握類路徑,首先應(yīng)從其源代碼入手。每個類都屬于一個包,而此包必須 遵守標(biāo)準(zhǔn)的命名約定。簡單地說,包的名稱要由顛倒的兩級域名開始,比如 com.example 或 edu.poly,之后是至少一個或多個單詞用于描述包的內(nèi)容。比方說,假設(shè)有一個域名為 elharo.com,如果要創(chuàng)建一個 Fraction 類,可以將其放入如下包中:

◆com.elharo.math

◆com.elharo.numbers

◆com.elharo.math.algebra.fields

在顛倒的域名之后,需要使用單一單詞的子包名。不要使用縮寫形式,并要保證拼寫正確。如果需要,可以使用拼寫檢查器。大部分與類路徑相關(guān)的問題都是由在源代碼中使用某個單詞而在文件系統(tǒng)中使用的卻是與之稍有不同的拼寫或縮寫而引起的。所以最好的做法就是總是使用拼寫正確且沒有縮寫的名稱。

整個包名稱應(yīng)該是小寫的,即使該名稱是在別處常采取大寫形式的一些慣用名稱和縮寫詞。Windows 通常不區(qū)分文件名中的大小寫,但 Java 和一些 UNIX 文件系統(tǒng)卻區(qū)分。如果需要在不同的系統(tǒng)間移動文件,大小寫問題肯定會帶來一些麻煩。

包名稱必須要全部由 ASCII 字符組成。一些編譯器也接受用 Hebrew、Cyrillic、Greek 或其他腳本編寫的包名稱,但大多數(shù)文件系統(tǒng)并不接受;您稍后就會看到,這樣的包名稱必須擔(dān)負(fù)充當(dāng)目錄名這樣的雙重任務(wù)。Java 包和類名是 Unicode,但很多文件系統(tǒng)(包括 FAT)卻不能識別 Unicode。遺憾的是,F(xiàn)AT 系統(tǒng)非常之多。如果只簡單地用不同的默認(rèn)編碼將文件復(fù)制到系統(tǒng)將會使編譯器和解釋器無法找到正確的類。

不要試圖在包名稱方面節(jié)約成本。長遠(yuǎn)來看,這只會有百害而無一利。如果需要域名就買一個。如果名稱太長就買個短些的(我曾經(jīng)買到了 xom.nu 這樣一個域名,因而我的包前綴就只有 6 個字符)。不要將類放到默認(rèn)包中(默認(rèn)包是指如果未在類中包含一條包語句時系統(tǒng)默認(rèn)給出的包)。如果包訪問不利于對象間的通信,就需要向類中添加更多的公共方法。需要多次使用的類必須要放到包中。

配置 Windows

文件擴(kuò)展名和路徑對于 Java 和 Windows 來說都很重要。所以在開始下面的步驟之前,務(wù)必確保能夠看到它們。隱藏部分文件名對終端用戶來說還可以接受(但我并不完全這么認(rèn)為),但對于開發(fā)人員來說顯然不行。要解決這個問題,需要對 Windows Explorer 的一些默認(rèn)設(shè)置做些更改。

首先在 Windows 桌面打開任意一個文件夾。找到 Tools 菜單,選擇 Folder Options。在隨后打開的對話框中,確認(rèn)選擇了如下三個選項(xiàng),如圖 1 所示:

◆“Display the full path in the address bar” 應(yīng)該選中。

◆“Display the full path in title bar” 應(yīng)該選中。

◆“Hide file extensions for known file types” 應(yīng)該清除。

 

 

 

圖 1. Windows Explorer 選項(xiàng)

您可能還想選中 “Show hidden files and folders”,它對您的 Java 作業(yè)沒有多大影響,但就我個人而言,我很希望能夠看到所操作的所有內(nèi)容。選中這些選項(xiàng)可以顯露關(guān)于所做事情的更多細(xì)節(jié),使您能更輕松地調(diào)試所出現(xiàn)的問題。

#p#

目錄結(jié)構(gòu)

下一步要做的是組織源文件來匹配包結(jié)構(gòu)。在某處創(chuàng)建一個干凈的空白目錄。本文中,我將其命名為 project。如果將該目錄放到根級別(比如 C:\project)就會更容易一些。也可以將其放到桌面或 Documents and Settings 文件夾。但這會讓輸入的命令更長也更為復(fù)雜,所以只在十分必要的情況下才這么做(如果您運(yùn)行的是 Windows XP 或更高,而且沒有管理員權(quán)限,那您沒有什么其他的選擇。在單用戶系統(tǒng)上,最好是要有管理員權(quán)限,這會使情況大大簡化)。

無論如何,不要將此目錄(或任何其他目錄)放到 JDK 文件夾(例如 C:\jdk1.6.0 或 C:\Program Files\Java\j2sdk1.5.0_09)。JDK 和 JRE 目錄在初始安裝之后應(yīng)該保持不動。

在 project 目錄內(nèi),另外創(chuàng)建兩個目錄: bin 和 src(一些人更喜歡將其分別命名為 build 和 source)。

接下來,在 src 目錄,建一個與包層次結(jié)構(gòu)相匹配的層次結(jié)構(gòu)。例如,如果給定類名為 com.elharo.math.Fraction,我會將 com 目錄放到 src 目錄中,然后在 com 目錄中創(chuàng)建一個 elharo 目錄,再在 elharo 目錄內(nèi)放一個 math 目錄,最后在 math 目錄內(nèi)放上 Fraction.java,如圖 2 所示:

 

 

 

圖 2. 符合包結(jié)構(gòu)的目錄結(jié)構(gòu)

要點(diǎn):不要在 src 目錄中放置除源代碼之外的任何內(nèi)容。通常這里放入的文件都是 .java 文件。在有些情況下,也可放置 .html 文件(用于 JavaDoc)或其他類型的源代碼。然而,決不能在此結(jié)構(gòu)內(nèi)放置 .class 文件或任何其他編譯并生成的工件。這樣做只會帶來麻煩。遺憾的是,如果不夠謹(jǐn)慎,javac 編譯器就會 “明知故犯”。在下一節(jié),將介紹如何修復(fù)這一問題。

#p#

編譯

編譯 Java 代碼需要一些技巧,原因是必須要跟蹤如下幾方面相關(guān)但又有所不同的內(nèi)容:

◆正在編譯的目標(biāo)文件。

◆編譯器在其中尋找目標(biāo)文件導(dǎo)入 .java 文件的那個目錄。

◆編譯器在其中尋找目標(biāo)文件導(dǎo)入 .class 文件的那個目錄。

◆編譯器在其中放置編譯輸出的目錄。

默認(rèn)地,javac 編譯器將上述目錄都認(rèn)為是當(dāng)前目錄,而這并不是您所希望的。因此,需要在編譯時顯式地指定這些元素。

要編譯的文件

指定的第一個要編譯的文件是 .java 文件,以從當(dāng)前目錄到該文件的整個路徑的形式給出。比如,假設(shè)當(dāng)前所在目錄是 圖 1 所示的 project 目錄。該目錄包含 src 目錄。此 src 目錄包含 com 目錄,而 com 目錄又包含 example 目錄,example 目錄下是 Fraction.java 文件。如下命令行對它進(jìn)行編譯:

C:\project> javac src\com\elharo\math\Fraction.java

如果路徑不正確,就會給出這樣的錯誤消息:

error: cannot read: src\com\example\mtah\Fraction.java

如果出現(xiàn)這樣的錯誤消息,就需要檢查路徑的各個部分,確保它們拼寫正確。在本例中,錯誤消息顯示 math 的第二和第三個字母顛倒了。

如果沒有發(fā)現(xiàn)拼寫錯誤,請檢查該文件是否處于它應(yīng)該出現(xiàn)的位置,方法是按如下所示發(fā)出一個 dir 命令:

C:\project\src> dir src\com\example\math

ls: src/com/example/math: No such file or directory

出現(xiàn)問題的原因通常是因?yàn)槁窂狡磳戝e誤,但也可能是由于當(dāng)前的目錄不對。在本例中,需要檢查當(dāng)前的工作目錄是不是 project 目錄。檢查命令行上 C: 和 > 之間的文本,以確認(rèn)當(dāng)前目錄是否是預(yù)期的目錄。在本例中,當(dāng)前目錄為 C:\project\src,而預(yù)期的目錄卻是 C:\project。

輸出到何處?

假設(shè)沒有出現(xiàn)任何語法錯誤,javac 將編譯后的 .class 文件放到與之對應(yīng)的.java 文件所在的相同目錄內(nèi)。這并不是您所想要的結(jié)果。將 .class 和 .java 文件混在一起常常會使清理編譯后的文件十分困難,因?yàn)楹芸赡軙馔鈩h除本應(yīng)保留的 .java 文件。這常會使清理構(gòu)建十分困難,而且還會導(dǎo)致版本問題。發(fā)布一個二進(jìn)制時,只對編譯后的 .class 文件進(jìn)行歸檔也會十分困難。因此,需要告知編譯器將編譯后的輸出放到一個完全不同的目錄內(nèi)。-d 開關(guān)用來指定輸出目錄(通常稱為 bin、build 或 class):

C:\project> javac -d bin src\com\elharo\math\Fraction.java

這時的輸出將如圖 3 所示。請注意 javac 已經(jīng)創(chuàng)建了完整的 com\elharo\math 目錄層次結(jié)構(gòu)。不需要手動建立。

 

 

 

圖 3. 并行源和編譯后的層次結(jié)構(gòu)

源路徑

源路徑 就是 Java 在其中尋找源文件的那個目錄。具體到本例,就是 src 目錄。該目錄必須包含源文件的層次結(jié)構(gòu),這些源文件可以被放到它們自己的目錄中。因此它不是 com 目錄也不是 src\com\elharo\math 目錄。

很多項(xiàng)目都使用不止一個類和包。它們通過導(dǎo)入語句和完整的包限定類名連接起來。例如,假設(shè)您在 com.elharo.gui 包中創(chuàng)建了 MainFrame 類,如清單 1 所示:

  1. package com.elharo.gui;  
  2. import com.elharo.math.*;  
  3. public class MainFrame{  
  4.     public static void main(String[] args) {  
  5.         Fraction f = new Fraction();  
  6.         // ...  
  7.     }  
  8. }  

清單 1. 一個包中的類可以導(dǎo)入另一個包中的類

該類使用的是與 MainFrame 類所在的包不同的包中的 com.elharo.math.Fraction 類。源設(shè)置現(xiàn)在應(yīng)該如圖 4 所示(我將編譯后的輸出從之前的步驟中刪除了。但這沒有關(guān)系,因?yàn)槲铱偸悄苤匦戮幾g它)。

  

圖 4. 幾個包的源結(jié)構(gòu)

現(xiàn)在來看一下試著像以前一樣編譯 MainFrame.java 會出現(xiàn)什么情況。

C:\project> javac -d bin src\com\elharo\gui\MainFrame.java src\com\elharo\gui\MainFrame.java:

3: package com.elharo.math does not exist
import com.elharo.math.*;
^
src\com\elharo\gui\MainFrame.java:7: cannot find symbol
symbol  : class Fraction
location: class com.elharo.gui.MainFrame
  private Fraction f = new Fraction();
          ^
src\com\elharo\gui\MainFrame.java:7: cannot find symbol
symbol  : class Fraction
location: class com.elharo.gui.MainFrame
  private Fraction f = new Fraction();
                           ^
3 errors

出現(xiàn)錯誤的原因是,雖然 javac 知道到何處可以找到 MainFrame.java,但它卻并不知道到何處可以找到 Fraction.java(您可能覺得它應(yīng)該具備足夠的智能來識別匹配的層次結(jié)構(gòu),但事實(shí)并非如此)。為了給它提供一些線索,必須指定源路徑。用源路徑指定編譯器應(yīng)該到哪些目錄查找源文件的層次結(jié)構(gòu)。在清單 2 中,源路徑是 src。所以我使用了 -sourcepath 選項(xiàng),如下所示:

C:\project> javac -d bin -sourcepath src src\com\elharo\gui\MainFrame.java

現(xiàn)在再編譯程序,就不會出現(xiàn)錯誤,并會產(chǎn)生如圖 5 所示的輸出。請注意 javac 也編譯了文件 Fraction.java,F(xiàn)raction.java 被當(dāng)前編譯的文件引用。

 

圖 5. 多類輸出

編譯源路徑中的多個目錄

在源路徑中可以有多個目錄,使用分號分隔各目錄,但通常沒有必要這么做。例如,若我想包括本地的 src 目錄和用來存放另一個項(xiàng)目的源代碼的 C:\Projects\XOM\src 目錄,我可以這樣進(jìn)行編譯:

C:\project> javac -d bin -sourcepath src;C:\Projects\XOM\src

src/com/elharo/gui/MainFrame.java

該命令并不編譯在這兩個層次結(jié)構(gòu)中所找到的每個文件。它只編譯由單個的 .java 文件直接或間接引用的文件,而此 .java 文件必須被編譯。

更常見的情況是,為 .java 文件用一個單一的源目錄,為類或放置了預(yù)編譯的第三方庫的 JAR 歸檔文件用多個目錄。而這正是類路徑的作用所在。

設(shè)置類路徑

在大中型項(xiàng)目中,每次都要對每個文件進(jìn)行重編譯會非常耗時。為減少這種編譯負(fù)擔(dān),可以在不同的 bin 目錄分別編譯和存儲相同項(xiàng)目的獨(dú)立部分。這些目錄被添加到類路徑。

將類添加到類路徑有幾種方法可選。但您只能使用 -classpath 命令行開關(guān)。例如,假設(shè)我想從另一個之前已經(jīng)編譯到目錄 C:\lib\classes 中的項(xiàng)目導(dǎo)入文件,那么我會向命令行添加 -classpath C:\lib\classes,如下所示:

C:\project> javac -d bin -sourcepath src -classpath C:\lib\classes

src\com\elharo\gui\MainFrame.java

現(xiàn)在假設(shè)需要添加兩個目錄:C:\project1\classes 和 C:\project2\classes,可以將它們用分號分開,如下所示:

C:\project> javac -d bin -sourcepath src

-classpath C:\project1\classes;C:\project2\classes

src\com\elharo\gui\MainFrame.java

 當(dāng)然,您也可以使用自己喜歡的各種相對路徑的格式。比如,如果 project1 和 project2 是當(dāng)前工作目錄的同級目錄(即它們有相同的父目錄),那么我會這樣引用它們:

C:\project> javac -d bin -sourcepath src

-classpath ..\project1\classes;..\project2\classes

src\com\elharo\gui\MainFrame.java

到目前為止,我都一直假設(shè)程序完全獨(dú)立并且沒有使用任何單獨(dú)的編譯后的第三方庫。如果需要使用第三方庫,還必須將它們也添加到類路徑。庫通常是 JAR 文件的格式,比如 junit.jar 或 icu4j.jar。在本例中,需要向類路徑添加的只是 JAR 文件本身,而不是包含 JAR 文件的目錄(從實(shí)質(zhì)上講,JAR 文件可以充當(dāng)包含編譯后的 .class 文件的一種目錄)。例如,如下命令會向類路徑添加三項(xiàng)內(nèi)容:目錄 C:\classes、當(dāng)前工作目錄中的文件 icu4j.jar 以及 E:\lib 中的文件 junit.jar:

C:\project> javac -d bin -sourcepath src

-classpath C:\classes;icu4j.jar;E:\lib\junit.jar

src\com\elharo\gui\MainFrame.java

JAR 文件僅用于 .class 文件和類路徑,不用于 .java 文件和源路徑。

#p#

運(yùn)行程序

現(xiàn)在您已經(jīng)成功地編譯了程序,可以運(yùn)行它了。運(yùn)行與編譯相似但更為簡單一些。當(dāng)運(yùn)行程序時,只需指定兩項(xiàng)內(nèi)容:

◆類路徑

◆包含 main() 方法的類的完全限定包名

無需指定源路徑。

通常這里的類路徑與編譯程序所使用的類路徑相同,只是多了一個放置編譯后的輸出的目錄。例如,如果編譯命令如下所示:

C:\project> javac -d bin -sourcepath src

-classpath C:\classes;E:\lib\junit.jar

src\com\elharo\gui\MainFrame.java

并且 main() 方法在類 com.elharo.gui.Mainframe.java 內(nèi),就可以像這樣運(yùn)行此程序:

C:\project> java -classpath C:\classes;E:\lib\junit.jar

com.elharo.gui.MainFrame

請務(wù)必注意命令行的最后一項(xiàng)是類名。它不是一個文件名,也不是 .java 或 .class。該類必須能夠在類路徑的某處找到。

#p#

可能存在類的其他地方

我強(qiáng)烈建議您在編譯和運(yùn)行時總是顯式地指定類路徑。也可以將文件放到其他地方,以便它們可以被添加到類路徑中,并被 javac 編譯器和 java 解釋器找到。這種做法會節(jié)省一些鍵入操作,但當(dāng)(注意不是如果)您無意間將一個舊版本的類放到類路徑中時,這卻會耗費(fèi)大量的調(diào)試時間。

在本節(jié),將展示類常常隱匿其中的幾個地點(diǎn),這些類很可能會出乎意料地冒到類路徑中并導(dǎo)致問題的出現(xiàn)。在不受您控制的機(jī)器上(比如服務(wù)器),這更為多見。

當(dāng)前工作目錄

編譯器總是將當(dāng)前工作目錄 (.) 添加到類路徑,而不管您是否曾顯式地要求這樣做。您很容易忘記在和您所在的目錄相同的目錄中有和沒有的內(nèi)容。因此,請盡量避免將任何類或?qū)哟谓Y(jié)構(gòu)放入 project 或 home 目錄。相反地,應(yīng)該將 .java 文件和 .class 文件分別放入 src 目錄和 bin 目錄。

CLASSPATH

過一會,您就會發(fā)現(xiàn)向類路徑手工添加 bin 目錄和 JAR 歸檔文件太過繁瑣。這時您可能會想要使用 CLASSPATH 環(huán)境變量??梢灾幌?CLASSPATH 環(huán)境變量添加一次目錄和 JAR 歸檔文件,之后就不需要在每次運(yùn)行 javac 或 java 時都要再鍵入這些路徑。

請務(wù)必抵制這種誘惑。這樣做,一旦加載了錯誤的類或錯誤版本的類,就會出問題。而且意外加載錯誤的類所帶來的調(diào)試時間常常會百倍于省下的那點(diǎn)鍵入時間。要避免輸入并自動處理類路徑有更好的方法。

jre\lib\ext

放在 jre\lib\ext 目錄中的 JAR 歸檔文件會被添加到通過虛擬機(jī)運(yùn)行的所有應(yīng)用程序的類路徑。這看起來很方便,實(shí)際上它與向 CLASSPATH 環(huán)境變量添加目錄一樣,存在長遠(yuǎn)的潛在問題。您遲早(通常很快)會在您想都想不到的地方加載類的一個錯誤版本的類并會為此付出大量的調(diào)試時間。

部署一個服務(wù)器端的應(yīng)用程序時,問題就更為嚴(yán)峻。請確保部署到的服務(wù)器在其 jre\lib\ext 目錄沒有任何額外的 JAR。如果您不熟悉錯誤癥狀,也不知道該如何查找,那么由類路徑中的錯誤版本的 JAV 歸檔文件所帶來的問題可能會非常難于調(diào)試。為了避免這些問題的出現(xiàn),一些框架甚至編寫了自己的類加載器,用來繞過 Java 代碼通常的類加載機(jī)制。

jre\lib\endorsed

放在 jre\lib\endorsed 目錄中的 JAR 文件也被添加到了通過虛擬機(jī)運(yùn)行的所有應(yīng)用程序的類路徑。不同的是,這里的文件被實(shí)際放入了 bootclasspath 而不是通常的類路徑,并可以代替 JDK 附帶的標(biāo)準(zhǔn)類。這種方式對于在 VM 更新 XML 解析器和修復(fù) bug 尤其有用。

但是,如前所述,這種方法看起來十分方便,但實(shí)際上也存在長期的潛在問題,原因也一樣。如果需要替換 JDK 類,可以在運(yùn)行時使用 -Xbootclasspath/p 選項(xiàng)來避免意外地加載錯誤版本的類。

C:\project> java -classpath C:\classes
-Xbootclasspath/p:xercesImpl.jar com.elharo.gui.MainFrame

#p#

自動管理類路徑

在想要使用電動射釘槍之前要先熟練使用錘子,與此相似,在試圖采用更強(qiáng)大的自動管理工具之前也要先能自如地手動管理這些類。如果您掌握了命令行工具集,就可以使用另外的工具來自動處理源路徑和類路徑所需的一些繁瑣過程。這些工具大部分也需要您像本文所介紹的那樣組織文件。

IDE

像 Eclipse 和 NetBeansMost 這樣的許多開發(fā)環(huán)境都能協(xié)助類路徑的自動管理。例如,當(dāng)更改包的名稱時,Eclipse 能相應(yīng)地移動對應(yīng)的 .java 文件,如圖 6 所示:

 

  

圖 6. 在 Eclipse 中快速修復(fù)類路徑

請記住,這些 IDE 位于文件系統(tǒng)的頂部,必須正確設(shè)置,尤其是當(dāng)需要與其他工具和其他 IDE 集成時就更應(yīng)如此。這些工具最大的貢獻(xiàn)是用 GUI 對話框、樹視圖和選項(xiàng)卡代替了命令行開關(guān)參數(shù),但其基本的文件結(jié)構(gòu)還是一樣的。

Ant

Ant 是自動化構(gòu)建過程的事實(shí)上的標(biāo)準(zhǔn)工具。與將目錄放在 jre\lib\ext 或 CLASSPATH 環(huán)境變量的做法不同,Ant 真的可以讓您創(chuàng)建單步的構(gòu)建過程。但您仍然需要在 Ant build.xml 設(shè)置類路徑并手動將源文件放到正確的目錄。但至少現(xiàn)在您無需在每次編譯都要重新進(jìn)行指定。

Maven

Maven 在組織和自動化構(gòu)建過程方面比 Ant 還要更進(jìn)一步。Maven 提供一個合理的默認(rèn)設(shè)置讓您可以通過添加少許幾行代碼并將源文件放到 Maven 能夠找到的位置即可構(gòu)建簡單的項(xiàng)目。您仍然需要調(diào)整文件系統(tǒng)和包的層次結(jié)構(gòu)。Maven 在管理第三方庫的依賴性方面也有上佳的表現(xiàn),雖然它不如 Ant 那么易于定制。

#p#

結(jié)束語

不管類路徑有多么棘手,您都可以通過一些簡單的規(guī)則對它加以管制,尤其是要記住如下的一些原則:

◆將類放到包中。

◆嚴(yán)格遵守包和類的命名約定和大小寫約定。

◆確保包的層次結(jié)構(gòu)與目錄的層次結(jié)構(gòu)匹配。

◆總是對 javac 應(yīng)用 -d 選項(xiàng)。

◆不要在 jre\lib\ext 內(nèi)放任何東西。

◆不要在 jre\lib\endorsed 內(nèi)放任何東西。

◆不要將 .java 文件與 .class 文件放在同一個目錄。

◆不要將任何 .java 或 .class 文件放在當(dāng)前的工作目錄。

最后一點(diǎn)提示:很多耗時的類路徑問題的起因大都是目錄名拼寫錯誤或從錯誤目錄進(jìn)行了編譯。如果您不能找到問題的所在,可以問問周圍的朋友或同事。以我的經(jīng)驗(yàn),自己發(fā)現(xiàn)自己的錯誤總是困難的,但這些錯誤在別人看來卻顯而易見。所以尋求他人的幫助也是一種切實(shí)有效的調(diào)試技巧。

類路徑確實(shí)不是個簡單的問題,但總會有相應(yīng)的應(yīng)對方法,所以它是完全可管理的。些許的謹(jǐn)慎加上對本文所介紹的命名約定、命令行參數(shù)和目錄結(jié)構(gòu)的注意,應(yīng)該能夠使您在問題最少的情況下編譯和運(yùn)行程序了。

【編輯推薦】

  1. 專題:Java線程
  2. Java Swing多線程死鎖問題解析
  3. 有趣的Java對象序列化緩存問題
  4. Java實(shí)用技巧:當(dāng)不能拋出checked異常時
  5. Java編程語言的優(yōu)點(diǎn)快遞

 

責(zé)任編輯:佚名 來源: IBM
相關(guān)推薦

2016-12-08 15:36:59

HashMap數(shù)據(jù)結(jié)構(gòu)hash函數(shù)

2020-07-21 08:26:08

SpringSecurity過濾器

2013-09-22 14:57:19

AtWood

2009-09-25 09:14:35

Hibernate日志

2023-10-19 11:12:15

Netty代碼

2021-02-17 11:25:33

前端JavaScriptthis

2020-09-23 10:00:26

Redis數(shù)據(jù)庫命令

2017-01-10 08:48:21

2017-08-15 13:05:58

Serverless架構(gòu)開發(fā)運(yùn)維

2019-06-25 10:32:19

UDP編程通信

2024-02-21 21:14:20

編程語言開發(fā)Golang

2022-11-04 09:43:05

Java線程

2015-11-04 09:57:18

JavaScript原型

2021-05-13 21:27:24

ThreadLocal多線程多線程并發(fā)安全

2013-06-14 09:27:51

Express.jsJavaScript

2021-04-20 23:25:16

執(zhí)行函數(shù)變量

2023-02-10 08:11:43

Linux系統(tǒng)調(diào)用

2017-01-13 22:42:15

iosswift

2023-11-05 12:05:35

JVM內(nèi)存

2011-04-11 16:48:12

Solaris權(quán)限
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號