1. 定義
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)。
2. 區別
JRE主要包含:java類庫的class文件(都在lib目錄下打包成了jar)和虛擬機(jvm.dll);JDK主要包含:java類庫的 class文件(都在lib目錄下打包成了jar)並自帶一個JRE。那麼爲何JDK要自帶一個JRE呢?並且jdk/jre/bin下的client 和server兩個文件夾下都包含jvm.dll(說明JDK自帶的JRE有兩個虛擬機)。
記得在環境變量path中設置jdk/bin路徑嗎?老師會告訴你們不設置的話javac和java是用不了的。確實jdk/bin目錄下包含了全部的命 令。但是有沒有人想過咱們用的java命令並非jdk/bin目錄下的而是jre/bin目錄下的呢?不信能夠作一個實驗,你們能夠把jdk /bin目錄下的java.exe剪切到別的地方再運行java程序,發現了什麼?一切OK!(JRE中沒有javac命令,緣由很簡單,它不是開發環 境)那麼有人會問了?我明明沒有設置jre/bin目錄到環境變量中啊?試想一下若是java爲了提供給大多數人使用,他們是不須要jdk作開發的,只需 要jre能讓java程序跑起來就能夠了,那麼每一個客戶還須要手動去設置環境變量多麻煩啊?因此安裝jre的時候安裝程序自動幫你把jre的 java.exe添加到了系統變量中,驗證的方法很簡單,去Windows/system32下面去看看吧,發現了什麼?有一個java.exe。
3. 難點
若是安裝了JDK,會發現你的電腦有兩套JRE,一套位於C:\Program Files\Java\jre6, 另一套位於 C:\Program Files\Java\jdk1.6.0_41\jre目錄下。
JRE的地位就象一臺PC機同樣,咱們寫好的Win32應用程序須要操做系統幫咱們運行,一樣的,咱們編寫的Java程序也必需要JRE才能運行。因此當你裝完JDK後,若是分別在硬盤上的兩個不一樣地方安裝了兩套JRE,那麼你能夠想象你的電腦有兩臺虛擬的Java
PC機,都具備運行Java程序的功能。因此咱們能夠說,只要你的電腦安裝了JRE,就能夠正確運行Java應用程序。
一、爲何Sun要讓JDK安裝兩套相同的JRE?
這是由於JDK裏面有不少用Java所編寫的開發工具,如javac.exe、jar.exe等,這些命令放置在 C:\Program Files\Java\jdk1.6.0_41\bin目錄裏。
由於他們是java編寫的命令,因此要依靠java的jar包,這些jar包存放在C:\Program Files\Java\jdk1.6.0_41\lib目錄裏
若是將C:\Program Files\Java\jdk1.6.0_41\lib\目錄裏面的tools.jar更名爲tools1.jar,而後運行javac.exe,顯示以下結果:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac /Main
可是輸入 java -cp C:\Program Files\Java\jdk1.6.0_41\lib\tools1.jar com.sun.tools.javac.Main
會獲得與javac.exe相同的結果。
從這裏咱們能夠證實javac.exe只是一個包裝器(Wrapper),而製做的目的是爲了讓開發者免於輸入太長的指命。
並且咱們能夠發現C:\Program Files\Java\jdk1.6.0_41\bin目錄下的程序都很小,不大於29K,從這裏咱們能夠得出一個結論。就是JDK裏的工具幾乎是用 Java所編寫,因此也是Java應用程序,所以要使用JDK所附的工具來開發Java程序,也必需要自行附一套JRE才行,因此位於 C:\Program Files\Java\jdk1.6.0_41\jre目錄下的那套JRE就是用來運行通常Java程序用的。
二、若是一臺電腦安裝兩套以上的JRE,誰來決定呢?
這個重大任務就落在java.exe身上。java.exe的工做就是找到合適的JRE來運行Java程序。 java.exe依照底下的順序來查找JRE:本身的目錄下有沒有JRE;父目錄有沒有JRE;查詢註冊表:
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment]
因此java.exe的運行結果與你的電腦裏面哪一個JRE被執行有很大的關係。java