Java環境變量配置以及作用、JDK與JRE區別以及命令行引入jar包


在配置環境變量中:

  • 設置JAVA_HOME:

一是為了方便引用,比如,JDK安裝在C:\jdk1.6.0目錄里,則設置JAVA_HOME為該目錄路徑, 那么以后要使用這個路徑的時候, 只需輸入%JAVA_HOME%即可, 避免每次引用都輸入很長的路徑串;

二則是歸一原則, 當JDK路徑改變的時候, 僅需更改JAVA_HOME的變量值即可, 否則,就要更改任何用絕對路徑引用JDK目錄的文檔, 要是萬一沒有改全, 某個程序找不到JDK, 后果是可想而知的----系統崩潰!

三則是第三方軟件會引用約定好的 JAVA_HOME 變量, 不然, 你不能正常使用該軟件。

在系統環境變量那一欄中點 -> 新建 JAVA_HOME (JAVA_HOME指向的是JDK的安裝路徑)

  • path 變量

path 變量使得我們能夠在系統中的任何地方運行java應用程序,比如 javac、java、javah 等等,這就要找到我們安裝 JDK 的目錄,

假設我們的JDK安裝在 C:\jdk1.6.0 目錄下,那么在 C:\jdk1.6.0\bin 目錄下就是我們常用的 java 應用程序,我們就需要把 C:\jdk1.6.0\bin 這個目錄加到 path 環境變量里面。

  • classpath 變量

classpath 環境變量,是當我們在開發java程序時需要引用別人寫好的類時,要讓 java 解釋器知道到哪里去找這個類。通常,sun 為我們提供了一些額外的豐富的類包,一個是 dt.jar,一個是 tools.jar,這兩個 jar 包都位於 C:\jdk1.6.0\lib 目錄下,所以通常我們都會把這兩個 jar 包加到我們的 classpath 環境變量中 set classpath=.;C:\jdk1.6.0\lib\tools.jar;C:\jdk1.6.0\lib\dt.jar。

注意在完成配置環境變量后測試JDK是否安裝成功時鍵入命令:java -version

 

另一種作用理解:

1,設置JAVA_HOME:  java的目錄
一、為了方便引用
,比如,你JDK安裝在C:\ProgramFiles\Java\jdk1.7.0目錄里,則設置JAVA_HOME為該目錄路徑, 那么以后你要使用這個路徑的時候, 只需輸入%JAVA_HOME%即可,避免每次引用都輸入很長的路徑串;

二、歸一原則, 當你JDK路徑被迫改變的時候, 你僅需更改JAVA_HOME的變量值即可, 否則,你就要更改任何用絕對路徑引用JDK目錄的文檔, 要是萬一你沒有改全, 某個程序找不到JDK, 后果是可想而知的----系統崩潰!

三、第三方軟件會引用JAVA_HOME變量, 不然, 你將不能正常使用該軟件, 以后用JAVA久了就會知道, 要是某個軟件不能正常使用, 不妨想想是不是這個問題.

2,設置CLASSPATH:   為了找到執行目標,java不同於linux上的可執行文件,linux的可執行文件提前都編譯鏈接好了,最終是一個打包好的文件。java有一堆可執行文件:*.class文件. CLASSPATH就是約定class文件查找路徑。
這是一個比較折磨初學者的問題, 這個變量設置的目的是為了程序能找到相應的".class"文件, 不妨舉個例子: 你編譯一個JAVA程序---A.java, 會得到一個A.class的類文件,你在當前目錄下執行java A, 將會得到相應的結果(前提是你已經設置CLASSPATH為"."). 現在, 你把A.class移到別的目錄下(例如:"e:\"), 執行java A, 將會有NoClassDefFindError的異常,原因就是找不到.class文件, 現在你把CLASSPATH增加為:".;e:\"再在任何目錄下運行java A, 看看會有什么結果~~:)~~~,一切正常, java命令通過CLASSPATH找到了.class文件!

classpath=c:\test就表示執行運行命令時去c:\test文件夾去找需要被執行的class文件
在java5之前該路徑是不能指定當前路徑的,除非這樣設置:classpath=.;c:\test,就表示先在當前目錄找class文件,要是沒找到就到c:\test去找;(當一個變量有多個值時,多個值之間是有英文的分號隔開)
設置從當前所在目錄查找(java1.5后默認):set classpath=.

3,設置PATH:(必須設置)
道理很簡單, 你想在任何時候都使用%JAVA_HOME%\bin\java等來執行java命令嗎, 當然不會, 於是, 你可以選擇把%JAVA_HOME%\bin添加到PATH路徑下, 這樣, 我們在任何路徑下就可以僅用java來執行命令了.
(當你在命令提示符窗口輸入你個代碼時,操作系統會在當前目錄和PATH變量目錄里查找相應的應用程序,並且執行.)

JDK和JRE的區別

JRE(Java Runtime Enviroment)

  是Java的運行環境。面向Java程序的使用者,而不是開發者。如果你僅下載並安裝了JRE,那么你的系統只能運行Java程序。JRE是運行Java程序所必須環境的集合,包含JVM標准實現及 Java核心類庫。它包括Java虛擬機、Java平台核心類和支持文件。它不包含開發工具(編譯器、調試器等)。

 

JDK(Java Development Kit)

  又稱J2SDK(Java2 Software Development Kit),是Java開發工具包,它提供了Java的開發環境(提供了編譯器javac等工具,用於將java文件編譯為class文件)和運行環境(提 供了JVM和Runtime輔助包,用於解析class文件使其得到運行)。如果你下載並安裝了JDK,那么你不僅可以開發Java程序,也同時擁有了運行Java程序的平台。JDK是整個Java的核心,包括了Java運行環境(JRE),一堆Java工具tools.jar和Java標准類庫 (rt.jar)。

  • 變量名:JAVA_HOME
  • 變量值:C:\Program Files (x86)\Java\jdk1.8.0_91        // 要根據自己的實際路徑配置
  • 變量名:CLASSPATH
  • 變量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;         //記得前面有個".",代表從當前目錄找
  • 變量名:Path

  • 變量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

 

1.一道面試題,如何在cmd窗口中引入其他jar包?因為平時如果脫離IDEA我們也需要運行程序,這就需要引入其他三方的jar包。

  這道題的考察點是要理解清楚classpath的作用就是約定class文件查找路徑。

  因此我們可以設置classpath變量的值為jar包的存放路徑即可訪問到對應的class文件。(cmd窗口中設置的環境變量只對本窗口有效)

 

例如:在桌面下面有一個class文件,我們需要在C盤運行該文件就可以設置classpath的值:

C盤下有一個class文件:

C:\Users\liqiang\Desktop>ls | findstr class
test.class

 

將classpath設置為桌面直接運行會自動從classpath中找class文件。

C:\>set classpath=C:\Users\liqiang\Desktop

C:\>echo %classpath%
C:\Users\liqiang\Desktop

C:\>java test
hello word!

 

或者java命令的時候指定classpath:

C:\>set classpath=

C:\>echo %classpath%
%classpath%

C:\>java -classpath C:\Users\liqiang\Desktop test
hello word!
C:\>

 

一個引入其他包的例子: 

(1)桌面的A文件夾下有一個A.jar

liqiang@root MINGW64 ~/Desktop/testPackage
$ ls ../A
A.jar

liqiang@root MINGW64 ~/Desktop/testPackage
$ pwd
/c/Users/liqiang/Desktop/testPackage

 

A.jar下面只有一個A.class

package pa.apackage;

public class A
{
  private String str;
  
  public String getStr()
  {
    return this.str;
  }
  
  public void setStr(String paramString)
  {
    this.str = paramString;
  }
  
  public A(String paramString)
  {
    this.str = paramString;
  }
}

 

(2)現在我們在桌面的testPackage,下面有個B文件夾,B文件下有個Bclass.java

liqiang@root MINGW64 ~/Desktop/testPackage
$ cat ./B/Bclass.java
package B;
import pa.apackage.A;
public class Bclass{
        public static void main(String s[]){
        A a = new A("Aname");
        System.out.print(a.getStr());
        }
}

 

(3)因為B目錄下的Bclass.java引用了A包下的一個A類,現在我們編譯並進行運行B類

  • 直接編譯(報錯,找不到A類所在的包)
C:\Users\liqiang\Desktop\testPackage>javac ./B/Bclass.java
.\B\Bclass.java:2: 錯誤: 程序包pa.apackage不存在
import pa.apackage.A;
                  ^
.\B\Bclass.java:5: 錯誤: 找不到符號
        A a = new A("Aname");
        ^
  符號:   類 A
  位置: 類 Bclass
.\B\Bclass.java:5: 錯誤: 找不到符號
        A a = new A("Aname");
                  ^
  符號:   類 A
  位置: 類 Bclass
3 個錯誤

 

  • 通過classpath定義class的路徑

第一種:通過classpath引入jar包使用指定jar包文件名字:

C:\Users\liqiang\Desktop\testPackage>set classpath=../A/A.jar;  #通過定義classpath定義查找class文件的路徑,最好是.;../A/A.jar(要寫上jar文件名字,不能只定位到目錄)

C:\Users\liqiang\Desktop\testPackage>javac ./B/Bclass.java  #編譯

C:\Users\liqiang\Desktop\testPackage>java B.Bclass  #運行,注意運行的時候是包名.classname
Aname

 

第二種引入classpath使用通配符:

C:\Users\liqiang\Desktop\testPackage>set classpath=      #清空classpath值:

C:\Users\liqiang\Desktop\testPackage>set classpath=.;../A/*  #使用通配符引入jar包 C:\Users\liqiang\Desktop\testPackage>javac ./B/Bclass.java C:\Users\liqiang\Desktop\testPackage>java B.Bclass  #因為Bclass是在B包下,所以運行的時候要用包名.類名 Aname

  關於打包的命令以及批處理命令運行可以參考:http://www.cnblogs.com/qlqwjy/p/7289391.html

查看java的參數:

C:\>java
用法: java [-options] class [args...]
           (執行類)
   或  java [-options] -jar jarfile [args...]
           (執行 jar 文件)
其中選項包括:
    -d32          使用 32 位數據模型 (如果可用)
    -d64          使用 64 位數據模型 (如果可用)
    -server       選擇 "server" VM
    -hotspot      是 "server" VM 的同義詞 [已過時]
                  默認 VM 是 server.

    -cp <目錄和 zip/jar 文件的類搜索路徑>
    -classpath <目錄和 zip/jar 文件的類搜索路徑>
                  用 ; 分隔的目錄, JAR 檔案
                  和 ZIP 檔案列表, 用於搜索類文件。
    -D<名稱>=<值>
                  設置系統屬性
    -verbose:[class|gc|jni]
                  啟用詳細輸出
    -version      輸出產品版本並退出
    -version:<值>
                  需要指定的版本才能運行
    -showversion  輸出產品版本並繼續
    -jre-restrict-search | -no-jre-restrict-search
                  在版本搜索中包括/排除用戶專用 JRE
    -? -help      輸出此幫助消息
    -X            輸出非標准選項的幫助
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                  按指定的粒度啟用斷言
    -da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
                  禁用具有指定粒度的斷言
    -esa | -enablesystemassertions
                  啟用系統斷言
    -dsa | -disablesystemassertions
                  禁用系統斷言
    -agentlib:<libname>[=<選項>]
                  加載本機代理庫 <libname>, 例如 -agentlib:hprof
                  另請參閱 -agentlib:jdwp=help 和 -agentlib:hprof=help
    -agentpath:<pathname>[=<選項>]
                  按完整路徑名加載本機代理庫
    -javaagent:<jarpath>[=<選項>]
                  加載 Java 編程語言代理, 請參閱 java.lang.instrument
    -splash:<imagepath>
                  使用指定的圖像顯示啟動屏幕
有關詳細信息, 請參閱 http://www.oracle.com/technetwork/java/javase/documentation
/index.html。

 

打包命令jar的選項:

例如:   jar cvf test.jar packageName 

C:\Users\liqiang\Desktop\testPackage>jar --help
非法選項: -
用法: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] file
s ...
選項包括:
    -c  創建新的歸檔文件
    -t  列出歸檔目錄
    -x  從檔案中提取指定的 (或所有) 文件
    -u  更新現有的歸檔文件
    -v  在標准輸出中生成詳細輸出
    -f  指定歸檔文件名
    -m  包含指定清單文件中的清單信息
    -e  為捆綁到可執行 jar 文件的獨立應用程序
        指定應用程序入口點
    -0  僅存儲; 不使用情況任何 ZIP 壓縮
    -M  不創建條目的清單文件
    -i  為指定的 jar 文件生成索引信息
    -C  更改為指定的目錄並包含其中的文件
如果有任何目錄文件, 則對其進行遞歸處理。
清單文件名, 歸檔文件名和入口點名稱的指定順序
與 'm', 'f''e' 標記的指定順序相同。

示例 1: 將兩個類文件歸檔到一個名為 classes.jar 的歸檔文件中:
       jar cvf classes.jar Foo.class Bar.class
示例 2: 使用現有的清單文件 'mymanifest' 並
           將 foo/ 目錄中的所有文件歸檔到 'classes.jar' 中:
       jar cvfm classes.jar mymanifest -C foo/ .

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM