oen【引導(dǎo)】(先關(guān)注我呀词身!
首先厅目,我們?yōu)榱四軌蚓幾g和運(yùn)行java程序,需要在PATH環(huán)境變量中把java.exe所在的目錄設(shè)置為 PATH變量的一部分法严,目的是為了能夠通過命令行運(yùn)行javac和java命令成為可能损敷。
當(dāng)你在命令行中輸入javac ...或者java ...的時(shí)候,如果提示你一個(gè)錯(cuò)誤:'javac' 不是內(nèi)部命令或外部命令深啤,也不是可運(yùn)行的程序或批處理文件拗馒。這時(shí)候說明操作系統(tǒng)沒有找到你通過命令行輸入的javac這個(gè)命令。
為什么呢墓塌?因?yàn)椴僮飨到y(tǒng)并 不知道你的javac.exe這個(gè)文件在哪里瘟忱,所以無法執(zhí)行對(duì)應(yīng)的文件。
那么為了能夠讓操作系統(tǒng)找到這個(gè)可執(zhí)行文件苫幢,我們就需要把javac.exe這個(gè) 可執(zhí)行文件所在的目錄作為PATH環(huán)境變量的一部分設(shè)置起來访诱,這樣當(dāng)你在命令行輸入一個(gè)命令的時(shí)候,操作系統(tǒng)就會(huì)自動(dòng)搜索PATH變量中所指定的所有目錄 了韩肝。
在Windows系統(tǒng)中PATH變量中的所有路徑采用分號(hào)分割触菜,如果在Linux系統(tǒng)中采用冒號(hào)分割。
PS哀峻,如果你設(shè)置好了環(huán)境變量涡相,在命令 行中還是出現(xiàn)同樣的錯(cuò)誤哲泊,那么有兩種可能,一種就是你的設(shè)置不正確催蝗,另一種就是你的設(shè)置沒有生效切威,一般你可以關(guān)閉命令行窗口再重新打開就可以了。
two【概述】(萌新求關(guān)注呀丙号!
①環(huán)境變量就是一個(gè)系統(tǒng)的路徑,當(dāng)用到相關(guān)的東西,它會(huì)從環(huán)境變量中來查找需要的東西.
首先簡(jiǎn)單的說明如何設(shè)置環(huán)境變量
1.安裝JDK后先朦,假設(shè)把JDK安裝在D:\Java\jdk1.5.0_06
2.然后在我的電腦上單擊鼠標(biāo)右鍵→選擇屬性→選擇高級(jí)→環(huán)境變量
(win10 在控制面板(win+x)→系統(tǒng)與安全→系統(tǒng)→高級(jí)系統(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是因?yàn)槿В?dāng)你的系統(tǒng)中重新安裝JDK喳魏,并改變過目錄的話,你只要修改 JAVA_HOME的內(nèi)容就可以了怀薛,PATH則不需要修改刺彩。
此外蟹略,JAVA_HOME變量還會(huì)有一些其他用途磺平,比如Eclipse這個(gè)IDE,它本身是由 java程序編寫的弃揽,那么在運(yùn)行的時(shí)候必然需要虛擬機(jī)的存在鼓择,所以Eclipse在啟動(dòng)時(shí)需要查找虛擬機(jī)三幻,如果有JAVA_HOME這個(gè)變量就漾,那么 Eclipse就會(huì)利用這個(gè)變量找到虛擬機(jī)的路徑呐能。
PSS具體想知道為什么,新建用戶變量 CLASSPATH抑堡,新建系統(tǒng)變量 JAVA_HOME往后看
設(shè)定path是告訴系統(tǒng)摆出,執(zhí)行檔程式位于什么地方。主要是執(zhí)行JAVAc和JAVA這兩個(gè)程式時(shí)使用的首妖,也就是當(dāng)你在命令列打入JAVAC??xxx.java和JAVA xxx時(shí)偎漫,系統(tǒng)要去哪那里找JAVAc和JAVA這兩個(gè)執(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這兩個(gè)程式時(shí)使用的棚壁,也就是當(dāng)在命令列打入JAVAC??xxx.java和JAVA xxx時(shí)杯矩,告訴系統(tǒng)去哪里找JAVAc和JAVA這兩個(gè)執(zhí)行檔。)
classpath:用來指定自己所寫的和要用到類文件(.jar)的路徑袖外。
Path :Path指定一個(gè)路徑列表史隆,用于搜索可執(zhí)行文件,執(zhí)行一個(gè)可執(zhí)行文件時(shí)曼验,如果不能在當(dāng)前路徑下找到泌射,則依次尋找path中的每一個(gè)路徑粘姜,直到找到。以便正確快速運(yùn)行.java程序熔酷。
(PS,設(shè)置path是因?yàn)閣indow xp是多用戶操作系統(tǒng)孤紧,支持不同用戶的個(gè)性化系統(tǒng)定制,這里設(shè)置的信息只影響當(dāng)前用戶拒秘,而不會(huì)影響其他用戶坛芽。假如只有一個(gè)用戶,只是運(yùn)行.class文件翼抠,則也不需要設(shè)置path環(huán)境咙轩,因?yàn)镴DK安裝之后會(huì)把java.exe等幾個(gè)關(guān)鍵文件復(fù)制到c:\windows\system32目錄中,而此目錄已經(jīng)存在于path變量阴颖,所以說用戶變量path隨不同用戶而設(shè)置的活喊,設(shè)置路徑:“D:\jdk1.5\bin ”。)
ClassPath:指定JAVA的類文件存放路徑量愧。classpath就是指定這樣一個(gè)路徑钾菊,即你運(yùn)行程序所需要的class文件的位置。
(設(shè)置classpath是為了將要使用到的class文件與Java中得類庫(kù)文件關(guān)聯(lián)起來,用以運(yùn)行一些特殊的java程序偎肃,如以.jar為后綴的文件或者是javac運(yùn)行java程序
設(shè)置方法是:(安裝jdk是的目錄為:d:\jdk1.5) 那么就在“變量值”文本框中鍵入“.;D:\jdk1.\lib\dt.jar;D:\jdk1.5\lib\tools.jar ”煞烫;)
three【詳解】(給個(gè)贊呀
①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)前目錄下料饥,那就會(huì)依次搜索path中設(shè)置的路徑;而java的各種操作命令是在其安裝路徑中的bin目錄下朱监,所以在path中設(shè)置了JDK的安裝目錄后就不用再把java文件的完整路徑寫出來了岸啡,它會(huì)自動(dòng)去path中設(shè)置的路徑中去找;
2.classpath的作用
classpath是指定你在程序中所使用的類(.class)文件所在的位置赫编,就如在引入一個(gè)類時(shí):import javax.swing.JTable這句話是告訴編譯器要引入javax.swing這個(gè)包下的JTable類巡蘸,而classpath就是告訴編譯器該到哪里去找到這個(gè)類(前提是你在classpath中設(shè)置了這個(gè)類的路徑);所以如果你沒有設(shè)定擂送,那JAVA就會(huì)跟你說它找不到悦荒。就算你是在JTable.javax.swing所在的路徑指向這個(gè)命令,也要在 classpath 里面跟 Java 說要到目前所在的路徑尋找JTable.javax.swing团甲。否則JAVA還是找不到的逾冬。另外 如果 JTable.javax.swing 里面用到 b.class 時(shí),在 classpath設(shè)定中也要包含 b.class 所在的路徑。
PS.如果你想要編譯在當(dāng)前目錄下找身腻,就加上“.”,如:.;C:\Program Files\Java\jdk\,這樣編譯器就會(huì)到當(dāng)前目錄和C:\Program Files\Java\jdk\去找javax.swing.JTable這個(gè)類产还;
PSS.大多數(shù)人都是用Eclipse寫程序,不設(shè)classpath也沒關(guān)系嘀趟,因?yàn)镋clipse有相關(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)變量整個(gè)系統(tǒng)的用戶都適用,兩者都可以在使用應(yīng)用程序時(shí)提供快捷.一般在編輯java文件或者C#文件時(shí)需要修改,設(shè)計(jì)到多個(gè)文件夾之間的切換時(shí)也可以根據(jù)自己的需要設(shè)置.
簡(jiǎn)單的說就是默伍,如果設(shè)置系統(tǒng)變量和用戶變量,都叫做設(shè)置環(huán)境變量衰琐,設(shè)置系統(tǒng)變量時(shí)也糊,該系統(tǒng)的所有帳號(hào)的用戶都可以使用,但是設(shè)置用戶變量時(shí)羡宙,其他的帳號(hào)登陸時(shí)就不一定可以使用狸剃。
下面以java環(huán)境變量為例設(shè)置方法:
1、如果是Win95/98狗热,在\autoexec.bat的最后面添加如下3行語(yǔ)句:
JAVA_HOME=c:\j2sdk1.4.1
PATH=%JAVA_HOME%\bin;%PATH%
CLASSPATH=.;%JAVA_HOME%\lib
看好了CLASSPATH中第一個(gè)"."钞馁,這個(gè)代表當(dāng)前目錄,很多人HelloWorld沒有運(yùn)行起來大多是這個(gè)原因斗搞。
2指攒、如果是Win2000或者XP慷妙,使用鼠標(biāo)右擊"我的電腦"->屬性->高級(jí)->環(huán)境變量
系統(tǒng)變量->新建->變量名:JAVA_HOME 變量值:c:\j2sdk1.4.1
系統(tǒng)變量->新建->變量名:CLASSPATH 變量值:.;%JAVA_HOME%\lib
系統(tǒng)變量->編輯->變量名:Path 在變量值的最前面加上:%JAVA_HOME%\bin;
CLASSPATH前面的那個(gè)"."和上面的意義是一樣的僻焚。
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)典測(cè)試代碼:
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這個(gè)環(huán)境變量】
我們繼續(xù)來談?wù)揅LASSPATH的問題狞山,很多書上在講解java程序的時(shí)候建議大家設(shè)置CLASSPATH這個(gè)環(huán)境變量,我們這里不建議大家設(shè)置叉寂。原因 我們會(huì)在稍后的時(shí)候看到萍启。講到CLASSPATH,
我們首先來看編寫java程序時(shí)一直在用的兩個(gè)命令javac和java。
javac的命令語(yǔ)法是這樣的:
javac <選項(xiàng)> <源文件>
我們常用的情況是這樣的:
javac -classpath <類路徑> <要編譯的java源文件>
這里的類路徑輸入什么呢勘纯?這里的類路徑是指要編譯的java源文件中所用的非java的基礎(chǔ)API中的類在那個(gè)目錄下局服,路徑可以是多個(gè)目錄,用分號(hào)隔開 來驳遵。比如說我們要編譯App.java這個(gè)文件淫奔,而這個(gè)文件中用到了com.util這個(gè)包中的MyDate這個(gè)類,現(xiàn)在我們假設(shè)MyDate這個(gè)類存在 目錄是:d:\mylib\com\util\MyDate.class堤结,那么我們?nèi)绾尉幾gApp這個(gè)類呢唆迁?我們的命令如下:
javac -classpath d:\mylib App.java
注意這里的classpath的內(nèi)容,我們只是指定路徑到package所在目錄竞穷,并不能把package一起指定進(jìn)去唐责,而且MyDate.class必 須在com\util這個(gè)目錄中,因?yàn)檫@個(gè)類定義了package為com.util瘾带。
我們?cè)賮砜磈ava這個(gè)命令妒蔚,這個(gè)命令的語(yǔ)法是這樣的:
java [選項(xiàng)] 類 [參數(shù)]
比如說以上面的例子,我們假設(shè)App這個(gè)類位于com.app這個(gè)package中月弛,它的存放目錄是:d:\dev\myapp\com\app\App.class肴盏,那么我們?cè)撊绾芜\(yùn)行這個(gè)類呢?命令如下:
java -classpath d:\dev\myapp;d:\mylib com.app.App
從命令中我們可以看到帽衙,在classpath后面我們指定兩個(gè)目錄菜皂,分別是App這個(gè)類的package所在的目錄和MyDate這個(gè)類的package 所在的目錄,這里的類路徑要給定的是要運(yùn)行的類和這個(gè)類用到的所有類的package所在的目錄厉萝,多個(gè)目錄之間用分號(hào)隔離開來恍飘,最后指定要運(yùn)行的類的時(shí)候 必須加上package。
如果我們?cè)谙到y(tǒng)環(huán)境變量中設(shè)置了CLASSPATH的話谴垫,在命令行中通過 java運(yùn)行的時(shí)候如果再不指定CLASSPATH參數(shù)章母,那么就會(huì)導(dǎo)致java虛擬機(jī)只是按照CLASSPATH環(huán)境變量中的目錄搜索類,而不在你的當(dāng)前 目錄下搜索類翩剪,結(jié)果自然會(huì)出現(xiàn)Exception in thread "main" java.lang.NoClassDefFoundError乳怎,所以當(dāng)你看到這個(gè)錯(cuò)誤的時(shí)候請(qǐng)查看一下你的系統(tǒng)環(huán)境變量,如果沒有設(shè)置 CLASSPATH前弯,那么在檢查一下你的當(dāng)前目錄蚪缀。為了確保萬(wàn)無一失,按照上面講述的例子進(jìn)行操作是不會(huì)發(fā)生任何錯(cuò)誤恕出。
叔叔出品询枚,必為精品。
吶浙巫,祝大家寫代碼愉快金蜀,我是程序媛刷后,我為自己代言hhh