
oen【引導(dǎo)】(先關(guān)注我呀!
首先,我們?yōu)榱四軌蚓幾g和運行java程序,需要在PATH環(huán)境變量中把java.exe所在的目錄設(shè)置為 PATH變量的一部分,目的是為了能夠通過命令行運行javac和java命令成為可能。
當(dāng)你在命令行中輸入javac ...或者java ...的時候,如果提示你一個錯誤:'javac' 不是內(nèi)部命令或外部命令,也不是可運行的程序或批處理文件。這時候說明操作系統(tǒng)沒有找到你通過命令行輸入的javac這個命令。
為什么呢?因為操作系統(tǒng)并 不知道你的javac.exe這個文件在哪里,所以無法執(zhí)行對應(yīng)的文件。
那么為了能夠讓操作系統(tǒng)找到這個可執(zhí)行文件,我們就需要把javac.exe這個 可執(zhí)行文件所在的目錄作為PATH環(huán)境變量的一部分設(shè)置起來,這樣當(dāng)你在命令行輸入一個命令的時候,操作系統(tǒng)就會自動搜索PATH變量中所指定的所有目錄 了。
在Windows系統(tǒng)中PATH變量中的所有路徑采用分號分割,如果在Linux系統(tǒng)中采用冒號分割。
PS,如果你設(shè)置好了環(huán)境變量,在命令 行中還是出現(xiàn)同樣的錯誤,那么有兩種可能,一種就是你的設(shè)置不正確,另一種就是你的設(shè)置沒有生效,一般你可以關(guān)閉命令行窗口再重新打開就可以了。
two【概述】(萌新求關(guān)注呀!
①環(huán)境變量就是一個系統(tǒng)的路徑,當(dāng)用到相關(guān)的東西,它會從環(huán)境變量中來查找需要的東西.
首先簡單的說明如何設(shè)置環(huán)境變量
1.安裝JDK后,假設(shè)把JDK安裝在D:\Java\jdk1.5.0_06
2.然后在我的電腦上單擊鼠標(biāo)右鍵→選擇屬性→選擇高級→環(huán)境變量
(win10 在控制面板(win+x)→系統(tǒng)與安全→系統(tǒng)→高級系統(tǒng)設(shè)置→環(huán)境變量)
3.新建用戶變量 CLASSPATH 變量值 .;D:\Java\jdk1.5.0_06\lib\tools.jar;
(“.”意味在當(dāng)前目錄下找被編譯的類,后文有解釋)
4.新建系統(tǒng)變量 JAVA_HOME 變量值 D:\Java\jdk1.5.0_06
5.編輯系統(tǒng)變量 Path 變量值 %JAVA_HOME%\bin;
PS將 PATH的內(nèi)容修改為:...;%JAVA_HOME%\bin是因為,當(dāng)你的系統(tǒng)中重新安裝JDK,并改變過目錄的話,你只要修改 JAVA_HOME的內(nèi)容就可以了,PATH則不需要修改。
此外,JAVA_HOME變量還會有一些其他用途,比如Eclipse這個IDE,它本身是由 java程序編寫的,那么在運行的時候必然需要虛擬機(jī)的存在,所以Eclipse在啟動時需要查找虛擬機(jī),如果有JAVA_HOME這個變量,那么 Eclipse就會利用這個變量找到虛擬機(jī)的路徑。
PSS具體想知道為什么,新建用戶變量 CLASSPATH,新建系統(tǒng)變量 JAVA_HOME往后看
設(shè)定path是告訴系統(tǒng),執(zhí)行檔程式位于什么地方。主要是執(zhí)行JAVAc和JAVA這兩個程式時使用的,也就是當(dāng)你在命令列打入JAVAC??xxx.java和JAVA xxx時,系統(tǒng)要去哪那里找JAVAc和JAVA這兩個執(zhí)行檔。
②path&classpath
path:用來制定java虛擬機(jī)(JVM)所在的路徑,設(shè)定path就是告訴系統(tǒng),執(zhí)行檔程式位于什么地方。也就是我們經(jīng)常用來編譯java源程序的javac.exe和執(zhí)行編譯后生成的.class的java.exe;(path主要是執(zhí)行JAVAc和JAVA這兩個程式時使用的,也就是當(dāng)在命令列打入JAVAC??xxx.java和JAVA xxx時,告訴系統(tǒng)去哪里找JAVAc和JAVA這兩個執(zhí)行檔。)
classpath:用來指定自己所寫的和要用到類文件(.jar)的路徑。
Path :Path指定一個路徑列表,用于搜索可執(zhí)行文件,執(zhí)行一個可執(zhí)行文件時,如果不能在當(dāng)前路徑下找到,則依次尋找path中的每一個路徑,直到找到。以便正確快速運行.java程序。
(PS,設(shè)置path是因為window xp是多用戶操作系統(tǒng),支持不同用戶的個性化系統(tǒng)定制,這里設(shè)置的信息只影響當(dāng)前用戶,而不會影響其他用戶。假如只有一個用戶,只是運行.class文件,則也不需要設(shè)置path環(huán)境,因為JDK安裝之后會把java.exe等幾個關(guān)鍵文件復(fù)制到c:\windows\system32目錄中,而此目錄已經(jīng)存在于path變量,所以說用戶變量path隨不同用戶而設(shè)置的,設(shè)置路徑:“D:\jdk1.5\bin ”。)
ClassPath:指定JAVA的類文件存放路徑。classpath就是指定這樣一個路徑,即你運行程序所需要的class文件的位置。
(設(shè)置classpath是為了將要使用到的class文件與Java中得類庫文件關(guān)聯(lián)起來,用以運行一些特殊的java程序,如以.jar為后綴的文件或者是javac運行java程序
設(shè)置方法是:(安裝jdk是的目錄為:d:\jdk1.5) 那么就在“變量值”文本框中鍵入“.;D:\jdk1.\lib\dt.jar;D:\jdk1.5\lib\tools.jar ”;)
three【詳解】(給個贊呀
①Path和classpath區(qū)別:
1.path的作用
path是系統(tǒng)用來指定可執(zhí)行文件的完整路徑,即使不在path中設(shè)置JDK的路徑也可執(zhí)行JAVA文件,但必須把完整的路徑寫出來,如C:\Program Files\Java\jdk1.6.0_10\bin\javac TheClass.java。path是用來搜索所執(zhí)行的可執(zhí)行文件路徑的,如果執(zhí)行的可執(zhí)行文件不在當(dāng)前目錄下,那就會依次搜索path中設(shè)置的路徑;而java的各種操作命令是在其安裝路徑中的bin目錄下,所以在path中設(shè)置了JDK的安裝目錄后就不用再把java文件的完整路徑寫出來了,它會自動去path中設(shè)置的路徑中去找;
2.classpath的作用
classpath是指定你在程序中所使用的類(.class)文件所在的位置,就如在引入一個類時:import javax.swing.JTable這句話是告訴編譯器要引入javax.swing這個包下的JTable類,而classpath就是告訴編譯器該到哪里去找到這個類(前提是你在classpath中設(shè)置了這個類的路徑);所以如果你沒有設(shè)定,那JAVA就會跟你說它找不到。就算你是在JTable.javax.swing所在的路徑指向這個命令,也要在 classpath 里面跟 Java 說要到目前所在的路徑尋找JTable.javax.swing。否則JAVA還是找不到的。另外 如果 JTable.javax.swing 里面用到 b.class 時,在 classpath設(shè)定中也要包含 b.class 所在的路徑。
PS.如果你想要編譯在當(dāng)前目錄下找,就加上“.”,如:.;C:\Program Files\Java\jdk\,這樣編譯器就會到當(dāng)前目錄和C:\Program Files\Java\jdk\去找javax.swing.JTable這個類;
PSS.大多數(shù)人都是用Eclipse寫程序,不設(shè)classpath也沒關(guān)系,因為Eclipse有相關(guān)的配置;
path是os用
classpath java用
path里面不光有Java的bin,還可以包含許多其他的,tc啊,masm阿,只要在path中設(shè)了這些環(huán)境的路徑,你在dos下的任何路徑上都可以調(diào)用這些路徑下的命令。
classpath是java專用的查找類的路徑
②系統(tǒng)變量是環(huán)境變量區(qū)別
系統(tǒng)變量是環(huán)境變量的一種,環(huán)境變量一種僅本用戶適用,另一種即系統(tǒng)變量整個系統(tǒng)的用戶都適用,兩者都可以在使用應(yīng)用程序時提供快捷.一般在編輯java文件或者C#文件時需要修改,設(shè)計到多個文件夾之間的切換時也可以根據(jù)自己的需要設(shè)置.
簡單的說就是,如果設(shè)置系統(tǒng)變量和用戶變量,都叫做設(shè)置環(huán)境變量,設(shè)置系統(tǒng)變量時,該系統(tǒng)的所有帳號的用戶都可以使用,但是設(shè)置用戶變量時,其他的帳號登陸時就不一定可以使用。
下面以java環(huán)境變量為例設(shè)置方法:
1、如果是Win95/98,在\autoexec.bat的最后面添加如下3行語句:
JAVA_HOME=c:\j2sdk1.4.1
PATH=%JAVA_HOME%\bin;%PATH%
CLASSPATH=.;%JAVA_HOME%\lib
看好了CLASSPATH中第一個".",這個代表當(dāng)前目錄,很多人HelloWorld沒有運行起來大多是這個原因。
2、如果是Win2000或者XP,使用鼠標(biāo)右擊"我的電腦"->屬性->高級->環(huán)境變量
系統(tǒng)變量->新建->變量名:JAVA_HOME 變量值:c:\j2sdk1.4.1
系統(tǒng)變量->新建->變量名:CLASSPATH 變量值:.;%JAVA_HOME%\lib
系統(tǒng)變量->編輯->變量名:Path 在變量值的最前面加上:%JAVA_HOME%\bin;
CLASSPATH前面的那個"."和上面的意義是一樣的。
3、如果是Linux用戶
在你的環(huán)境中,通常我加在.bashrc文件中,你可以加在你的Profile文件中。
/usr/local/jdk 為你安裝jdk的目錄。
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin
HelloWorld.java經(jīng)典測試代碼:
public class HelloWorld{
public static void main(String args[]){
System.out.println("hello world !")
}
}
命令行輸入:javac HelloWorld.java
生成HelloWorld.class
命令行輸入:java HelloWorld
屏幕上打印"hello world !"
for【不建議大家設(shè)置CLASSPATH這個環(huán)境變量】
我們繼續(xù)來談?wù)揅LASSPATH的問題,很多書上在講解java程序的時候建議大家設(shè)置CLASSPATH這個環(huán)境變量,我們這里不建議大家設(shè)置。原因 我們會在稍后的時候看到。講到CLASSPATH,
我們首先來看編寫java程序時一直在用的兩個命令javac和java。
javac的命令語法是這樣的:
javac <選項> <源文件>
我們常用的情況是這樣的:
javac -classpath <類路徑> <要編譯的java源文件>
這里的類路徑輸入什么呢?這里的類路徑是指要編譯的java源文件中所用的非java的基礎(chǔ)API中的類在那個目錄下,路徑可以是多個目錄,用分號隔開 來。比如說我們要編譯App.java這個文件,而這個文件中用到了com.util這個包中的MyDate這個類,現(xiàn)在我們假設(shè)MyDate這個類存在 目錄是:d:\mylib\com\util\MyDate.class,那么我們?nèi)绾尉幾gApp這個類呢?我們的命令如下:
javac -classpath d:\mylib App.java
注意這里的classpath的內(nèi)容,我們只是指定路徑到package所在目錄,并不能把package一起指定進(jìn)去,而且MyDate.class必 須在com\util這個目錄中,因為這個類定義了package為com.util。
我們再來看java這個命令,這個命令的語法是這樣的:
java [選項] 類 [參數(shù)]
比如說以上面的例子,我們假設(shè)App這個類位于com.app這個package中,它的存放目錄是:d:\dev\myapp\com\app\App.class,那么我們該如何運行這個類呢?命令如下:
java -classpath d:\dev\myapp;d:\mylib com.app.App
從命令中我們可以看到,在classpath后面我們指定兩個目錄,分別是App這個類的package所在的目錄和MyDate這個類的package 所在的目錄,這里的類路徑要給定的是要運行的類和這個類用到的所有類的package所在的目錄,多個目錄之間用分號隔離開來,最后指定要運行的類的時候 必須加上package。
如果我們在系統(tǒng)環(huán)境變量中設(shè)置了CLASSPATH的話,在命令行中通過 java運行的時候如果再不指定CLASSPATH參數(shù),那么就會導(dǎo)致java虛擬機(jī)只是按照CLASSPATH環(huán)境變量中的目錄搜索類,而不在你的當(dāng)前 目錄下搜索類,結(jié)果自然會出現(xiàn)Exception in thread "main" java.lang.NoClassDefFoundError,所以當(dāng)你看到這個錯誤的時候請查看一下你的系統(tǒng)環(huán)境變量,如果沒有設(shè)置 CLASSPATH,那么在檢查一下你的當(dāng)前目錄。為了確保萬無一失,按照上面講述的例子進(jìn)行操作是不會發(fā)生任何錯誤。
叔叔出品,必為精品。
吶,祝大家寫代碼愉快,我是程序媛,我為自己代言hhh