1、Java環境變量設置java
windows 下配置JDK環境變量: linux
1. 安裝JDK,安裝過程當中能夠自定義安裝目錄等信息,例如咱們選擇安裝目錄爲D:\java\jdk1.5.0_08;windows
2. 安裝完成後,右擊「個人電腦」,點擊「屬性」;tomcat
3. 選擇「高級」選項卡,點擊「環境變量」;bash
4. 在「系統變量」中,設置3項屬性,JAVA_HOME,PATH,CLASSPATH(大小寫無所謂),若已存在則點擊「編輯」,不存在則點擊「新建」;服務器
5. JAVA_HOME指明JDK安裝路徑,就是剛纔安裝時所選擇的路徑D:\java\jdk1.5.0_08,此路徑下包括lib,bin,jre等文件夾(此變量最好設置,由於之後運行tomcat,eclipse等都須要依*此變量);併發
6. Path使得系統能夠在任何路徑下識別java命令,設爲:eclipse
%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin函數
7. CLASSPATH爲java加載類(classorlib)路徑,只有類在classpath中,java命令才能識別,設爲:工具
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(要加.表示當前路徑)
%JAVA_HOME%就是引用前面指定的JAVA_HOME;
8.「開始」->;「運行」,鍵入「cmd」;
9. 鍵入命令「java-version」,「java」,「javac」幾個命令,出現畫面,說明環境變量配置成功;
linux 下配置JDK環境變量:
◆JAVA_HOME:該環境變量的值就是Java所在的目錄,一些Java版的軟件和一些Java的工具須要用到該變量,設置PATH和CLASSPATH的時候,也可使用該變量以方便設置。
◆PATH:指定一個路徑列表,用於搜索可執行文件的。執行一個可執行文件時,若是該文件不能在當前路徑下找到,則依次尋找PATH中的每個路徑,直至找到。或者找完PATH中的路徑也不能找到,則報錯。Java的編譯命令(javac),執行命令(java)和一些工具命令(javadoc,jdb等)都在其安裝路徑下的bin目錄中。所以咱們應該將該路徑添加到PATH變量中。
◆CLASSPATH:也指定一個路徑列表,是用於搜索Java編譯或者運行時須要用到的類。在CLASSPATH列表中除了能夠包含路徑外,還能夠包含.jar文件。Java查找類時會把這個.jar文件看成一個目錄來進行查找。一般,咱們須要把JDK安裝路徑下的jre\lib\rt.jar(Linux:jre/lib/rt.jar)包含在CLASSPATH中。
PATH和CLASSPATH都指定路徑列表,列表中的各項(即各個路徑)之間使用分隔符分隔。在Windows下,分隔符是分號(;),而在Linux下,分隔符是冒號(:)。
在此以前,咱們須要作個假設。假設JDK在Windows下的安裝路徑是C:\jdk\,在Linux下的安裝路徑是/usr/local/jdk/。那麼,安裝後的JDK至少會包括以下內容:
1.C:\jdk(/usr/local/jdk)
2.|--bin
3.|--demo
4.|--include
5.|--jre
6.|—lib
Java環境變量在Windows下設置
Windows下使用set命令設置環境變量,爲了使每一次啓動計算機都設置這些環境變量,應該在系統盤根目錄下的autoexec.bat文件中進行設置,如:
10.set JAVA_HOME=C:\jdk
11.set PATH=%JAVA_HOME%\bin;C:\Windows;C:\Windows\Command
12.set CLASSPATH=%JAVA_HOME%\jre\lib\rt.jar;.
有些版本的Windows不能用%變量名%來替換環境變量的內容,那麼就只好直接寫C:\jdk而不是%JAVA_HOME%了。另外,C:\Windows和C:\Windows\Command是Windows會自動加入路徑的,因此能夠從設置中去掉。若是在autoexec.bat中已經設置了PATH,那隻須要將%JAVA_HOME%\bin加到原來設置PATH的那條語句中就好了。
CLASSPATH也能夠根據須要設置或者加入其它的路徑,好比你想把本身寫的一些類放在C:\java中,就能夠把C:\java也添加到CLASSPATH中去,setCLASSPATH=%JAVA_HOME%\jre\lib\rt.jar;C:\java;.。
注意,在CLASSPATH中包含了一個「當前目錄(.)」。包含了該目錄後,就能夠到任意目錄下去執行須要用到該目錄下某個類的Java程序,即便該路徑並未包含在CLASSPATH中也能夠。緣由很簡單:雖然沒有明確的把該路徑包含在CLASSPATH中,但CLASSPATH中的「.」在此時就表明了該路徑。
Java環境變量在Linux下設置
Linux下使用「變量名=變量值」設置變量,並使用export命令將其導出爲環境變量。爲了使每一次登陸都自動設置好這些變量,你須要在~/.bash_profile裏或者~./bashrc裏進行設置,如
20.export JAVA_HOME=/usr/local/jdk
21.export PATH=$JAVA_HOME/bin:$PATH
22.export CLASSPATH=$JAVA_HOME/jre/lib/rt.jar:.
設置PATH時用的$JAVA_HOME是指替換變量JAVA_HOME的值到$JAVA_HOME所在位置。如上句實際就是export PATH=/usr/local/jdk/bin:$PATH。這句中$PATH也是一樣的做用,不過這裏的PATH是指之前設置的PATH變量的值,而非本次設置PATH變量的值。
注意,在CLASSPATH中包含了一個「當前目錄(.)」。包含了該目錄後,就能夠到任意目錄下去執行須要用到該目錄下某個類的Java程序,即便該路徑並未包含在CLASSPATH中也能夠。緣由很簡單:雖然沒有明確的把該路徑包含在CLASSPATH中,但CLASSPATH中的「.」在此時就表明了該路徑。
2、Java命令行使用
查看參數列表
虛擬機參數分爲基本和擴展兩類,在命令行中輸入 JAVA_HOME/bin/java -help就可獲得基本參數列表,在命令行輸入 JAVA_HOME/bin/java -X 就可獲得擴展參數列表。
基本參數說明
javac –help
java -help
1. -client,-server
這兩個參數用於設置虛擬機使用何種運行模式,client 模式啓動比較快,但運行時性能和內存管理效率不如 server 模式,一般用於客戶端應用程序。相反,server 模式啓動比 client 慢,但可得到更高的運行性能。
在 windows上,缺省的虛擬機類型爲 client 模式,若是要使用 server模式,就須要在啓動虛擬機時加-server 參數,以得到更高性能,對服務器端應用,推薦採用 server 模式,尤爲是多個 CPU 的系統。在 Linux,Solaris 上缺省採用 server模式。
2. -hotspot
含義與 client 相同,jdk1.4 之前使用的參數,jdk1.4 開始再也不使用,代之以 client。
3. -cp
運行Java要使用類的全名來運行。若是遇到文件夾,則須要-cp設置到頂級包下面,例如:
4. -classpath
虛擬機在運行一個類時,須要將其裝入內存,虛擬機搜索類的方式和順序以下:Bootstrap classes,Extension classes,User classes
Bootstrap 是虛擬機自帶的 jar 或 zip 文件,虛擬機首先搜索這些包文件,用System.getProperty("sun.boot.class.path")可獲得虛擬機搜索的包名。
Extension 是位於 jre/lib/ext 目錄下的 jar 文件,虛擬機在搜索完 Bootstrap後就搜索該目錄下的 jar 文件。用System. getProperty("java.ext.dirs」)可獲得虛擬機使用Extension 搜索路徑。
User classes 搜索順序爲當前目錄、環境變量 CLASSPATH、-classpath。
告知虛擬機搜索目錄名、jar 文檔名、zip 文檔名,之間用分號;分隔。例如當你本身開發了公共類幷包裝成一個 common.jar 包,在使用 common.jar 中的類時,就須要用-classpath common.jar 告訴虛擬機從 common.jar 中查找該類,不然虛擬機就會拋出 java.lang.NoClassDefFoundError異常,代表未找到類定義。在運行時可用 System.getProperty(「java.class.path」)獲得虛擬機查找類的路徑。
使用-classpath 後虛擬機將再也不使用 CLASSPATH 中的類搜索路徑,若是-classpath 和 CLASSPATH 都沒有設置,則虛擬機使用當前路徑(.)做爲類搜索路徑。推薦使用-classpath 來定義虛擬機要搜索的類路徑,而不要使用環境變量 CLASSPATH 的搜索路徑,以減小多個項目同時使用 CLASSPATH 時存在的潛在衝突。例如應用 1 要使用a1.0.jar 中的類 G,應用 2 要使用 a2.0.jar 中的類 G,a2.0.jar 是 a1.0.jar 的升級包,當a1.0.jar,a2.0.jar 都在 CLASSPATH 中,虛擬機搜索到第一個包中的類 G 時就中止搜索, 若是應用1應用2的虛擬機都從CLASSPATH中搜索,就會有一個應用得不到正確版本的類G。
javac -classpath .;jar01.jar;jar02.jar;……;jarN.jar class_name.java :使用-classpath選項,指定了在編譯Java源代碼時,用到類庫的位置。通常用於該類庫不在當前CLASSPATH的環境變量中。
5. -D<propertyName>=value
在虛擬機的系統屬性中設置屬性名/值對,運行在此虛擬機之上的應用程序可用。當虛擬機報告類找不到或類衝突時可用此參數來診斷來查看虛擬機從裝入類的狀況。
在虛擬機發生內存回收時在輸出設備顯示信息,格式以下: [Full GC 268K->168K(1984K), 0.0187390 secs],該參數用來監視虛擬機內存回收的狀況。
8. -verbose:jni
在虛擬機調用 native 方法時輸出設備顯示信息,格式以下:[Dynamic-linking native method HelloNative.sum ... JNI] 該參數用來監視虛擬機調用本地方法的狀況,在發生 jni錯誤時可爲診斷提供便利。
9. -version
顯示可運行的虛擬機版本信息而後退出。
10. –showversion
顯示版本信息以及幫助信息。 
擴展參數說明
javac –X
java -X
1. -Xmixed
設置-client 模式虛擬機對使用頻率高的方式進行 Just-In-Time 編譯和執行,對其餘方法使用解釋方式執行。該方式是虛擬機缺省模式。
2. -Xint
設置-client模式下運行的虛擬機以解釋方式執行類的字節碼,不將字節碼編譯爲本機碼。
3. -Xbootclasspath:path
4. -Xbootclasspath/a:path
5. -Xbootclasspath/p:path
改變虛擬機裝載缺省系統運行包 rt.jar 而從-Xbootclasspath 中設定的搜索路徑中裝載系統運行類。除非你本身能寫一個運行時,不然不會用到該參數。
/a:將在缺省搜索路徑後加上 path 中的搜索路徑。
/p:在缺省搜索路徑前先搜索 path 中的搜索路徑。
6. -Xnoclassgc
關閉虛擬機對 class 的垃圾回收功能。
7. -Xincgc
啓動增量垃圾收集器,缺省是關閉的。增量垃圾收集器能減小偶然發生的長時間的垃圾回收形成的暫停時間。但增量垃圾收集器和應用程序併發執行,所以會佔用部分 CPU 在應用程序上的功能。
8. -Xloggc:<file>
將虛擬機每次垃圾回收的信息寫到日誌文件中,文件名由 file 指定,文件格式是平文件,內容和-verbose:gc 輸出內容相同。
9. -Xbatch
虛擬機的缺省運行方式是在後臺編譯類代碼,而後在前臺執行代碼,使用-Xbatch參數將關閉虛擬機後臺編譯,在前臺編譯完成後再執行。
10. -Xms<size>
設置虛擬機可用內存堆的初始大小,缺省單位爲字節,該大小爲 1024 的整數倍而且要大於1MB,可用 k(K)或m(M)爲單位來設置較大的內存數。初始堆大小爲 2MB。
例如:-Xms6400K,-Xms256M
11. -Xmx<size>
設置虛擬機內存堆的最大可用大小,缺省單位爲字節,該值必須爲 1024 整數倍,而且要大於 2MB。可用 k(K)或 m(M)爲單位來設置較大的內存數。缺省堆最大值爲 64MB。
例如:-Xmx81920K,-Xmx80M
當應用程序申請了大內存運行時虛擬機拋出 java.lang.OutOfMemoryError: Java heap space 錯誤,就須要使用-Xmx 設置。
12. -Xss<size>
設置線程棧的大小,缺省單位爲字節。與-Xmx 相似,也可用 K 或 M 來設置較大的值。一般操做系統分配給線程棧的缺省大小爲 1MB。
另外也可在 java 中建立線程對象時設置棧的大小,構造函數原型爲 Thread(ThreadGroup group, Runnable target, String name, long stackSize)。
13. -Xprof
輸出 CPU 運行時的診斷信息。
14. -Xfuture
對類文件進行嚴格格式檢查,以保證類代碼符合類代碼規範。爲保持向後兼容,虛擬機缺省不進行嚴格的格式檢查。
15. -Xrs
減小虛擬機中操做系統的信號(singals)的使用。該參數一般用在虛擬機之後臺服務方式運行時使用(如 Servlet)。
16. -Xcheck:jni
調用 JNI 函數時進行附加的檢查,特別地虛擬機將校驗傳遞給 JNI 函數參數的合法性,在本地代碼中遇到非法數據時,虛擬機將報一個致命錯誤而終止。使用該參數後將形成性能降低。
3、其餘命令行使用
1. jar
jar命令行格式爲:
jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目錄] 文件名,其中{ctxu}是jar命令的子命令,每次jar命令只能包含一個子命令。
使用JDK的jar命令打包,會自動在壓縮包中生成一個META-INF目錄,其中有一個MANIFEST.MF文件。使用jar命令進行以下壓縮:
jar cf test.jar test
test.jar 壓縮包中,包含一個test文件夾和一個META-INF文件夾,其中有一個MANIFEST.MF文件。
2. Windows/Linux下引用jar包,並用javac/java編譯運行
1> Windows
假設要引用的jar放在D:/test目錄下,名字爲t1.jar, java源文件放在D:/test/src目錄下,名字爲t2.java。
編譯:
javac -cp d:/test/t1.jar d:/test/src/t2.java
運行:
java -cp d:/test/t1.jar;d:/test/src t2
注意,分號後面沒有空格,不然報錯。
須要注意的是,若是java源文件是有package的,好比package是com.example, 源文件爲com.example.t2.java.
好比文件的存儲目錄爲: D:/test/src/com/example/t2.java, 而後好比t1.jar放在D:/test/lib/ 下面, 那麼javac編譯的時候要在D:/test/目錄下進行。
能夠用-d選項指定.class的生成位置。
javac -cp d:/test/lib/t1.jar;classes;. -d classes src/com/example/t2.java
2> Linux
假設jar包放在/home/bill目錄下,名字爲t1.jar,java源文件放在/home/bill/src目錄下,名字爲t2.java
編譯:
javac -cp /home/bill/t1.jar /home/bill/src/t2.java
若是是引用多個jar,那麼用冒號分開。
運行:
java -cp /home/bill/t1.jar:/home/bill/src t2
注意,這裏是冒號分隔符,而且後面沒有空格。