轉載地址:http://hi.baidu.com/cwyin/blog/item/13d5a538c2bf66d33a87ce83.html
對於java初學者來說,往往不懂區分jdk和jre的區別,實際上這兩個東西差別很大的,有必要了解一下:
·SDK(Software Development Kit)一般指軟件開發包,可以包括函數庫、編譯程序等。
·JDK(Java Development Kit)是面向JAVA開發人員使用的SDK,它提供了Java的開發環境和運行環境。
·JRE(Java Runtime Enviroment)是指Java的運行環境,是面向Java程序的使用者,而不是開發者。
如 果安裝了JDK,會發現你的電腦有兩套JRE,一套位於j2sdk\jre, 另外一套位於 C:\Program Files\Java\j2re1.4.1_01目錄下,后面這套比前面那套少了Server端的Java虛擬機,不過直接將前面那套的Server端 Java虛擬機復制過來就行了。
而且在安裝JDK時可以選擇是否安裝這個位於 C:\Program Files\Java 目錄下的JRE。如果你只安裝JRE,而不是JDK,那么只會在 C:\Program Files\Java 目錄下安裝唯一的一套JRE(供瀏覽器來使用)。
JRE 的地位就象一台PC機一樣,我們寫好的Win32應用程序需要操作系統幫我們運行,同樣的,我們編寫的Java程序也必須要JRE才能運行。所以當你裝完 JDK后,如果分別在硬盤上的兩個不同地方安裝了兩套JRE,那么你可以想象你的電腦有兩台虛擬的Java PC機,都具有運行Java程序的功能。所以我們可以說,只要你的電腦安裝了JRE,就可以正確運行Jav a應用程序。
1、 為什么Sun要讓JDK安裝兩套相同的JRE?這是因為JDK里面有很多用Java所編寫的開發工具(如javac.exe、jar.exe等),而且都 放置在 \lib\tools.jar 里。從下面例子可以看出,先將tools.jar改名為tools1.jar,然后運行javac.exe,顯示如下結果: Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac /Main 這個意思是說,你輸入javac.exe與輸入 java -cp c:\jdk\lib\tools.jar com.sun.tools.javac.Main 是一樣的,會得到相同的結果。從這里我們可以證明javac.exe只是一個包裝器(Wrapper),而制作的目的是為了讓開發者免於輸入太長的指命。 而且可以發現\lib目錄下的程序都很小,不大於2 9K,從這里我們可以得出一個結論。就是JDK里的工具幾乎是用Java所編寫,所以也是Java應用程序,因此要使用JDK所附的工具來開發Java程 序,也必須要自行附一套JRE才行,所以位於C:\Program Files\Java目錄下的那套JRE就是用來運行一般Java程序用的。
2、 如果一台電腦安裝兩套以上的JRE,誰來決定呢?這個重大任務就落在java.exe身上。Java.exe的工作就是找到合適的JRE來運行Java程 序。 Java.exe依照底下的順序來查找JRE:自己的目錄下有沒有JRE;父目錄有沒有JRE;查詢注冊表: [HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment] 所以java.exe的運行結果與你的電腦里面哪個JRE被執行有很大的關系。
3、介紹JVM JRE目錄下的Bin目錄有兩個目錄:server與client。這就是真正的jvm.dll所在。 jvm.dll無法單獨工作,當jvm.dll啟動后,會使用explicit的方法(就是使用Win32 API之中的LoadLibrary()與GetProcAddress()來載入輔助用的動態鏈接庫),而這些輔助用的動態鏈接庫(.dll)都必須位 於jvm.dll所在目錄的父目錄之中。因此想使用哪個JVM,只需要設置PATH,指向JRE所在目錄底下的jvm.dll。
也可以參考下面的介紹:
轉自:
http://www.javanb.com/java/1/17269.html
Java語言的發展經歷
(1)Sun的Java語言開發小組成立於1991年,其目的是開拓消費類電子產品市場,例如,交互式電視、烤面包箱等。
(2) 開始寫Java時,並不局限於擴充語言機制本身,更注重於語言所運行的軟硬件環境。他要建立一個系統,這個系統運行於一個巨大的、分布的、異構的網格環境 中,完成各電子設備之間的通信與協同工作。設計中采用了虛機器碼(Virtual Machine Code)方式
(3)中性瀏覽器HotJava的誕生。不依賴於任何硬件平台和軟件平台,它應是一種實時性較高、可靠安全、有交互功能的瀏覽器。
(4)在以網絡為中心的計算時代,不支持HTML和Java,就意味着應用程序的應用范圍只能限於同質的環境。
(5) 未來的計算方式,每個HomePage的實質是一個多媒體應用程序,這些程序用Java來開發。Java應用程序運行在異質的機器、異質的操作系統之上, 甚至於電冰箱、烤面包箱、防盜電子設備之中, 用Internet把所有的電子設備連接起來,通過TCP/IP進行信息的交流。未來可能進行代理(Agent)交換,代理有一定的智能性,那便是信息交 換的更高級階段。
Java工業
(1)Java Card
(2)Embedded System
(3)Java Applet
(4)Java Application
(5)Java OS
Java平台技術
Java 不僅僅是一種語言,更重要是一種區別於傳統系統,遵循"網絡就是計算機"信條的平台技術。Java平台將面向對象系統擴展成包括程序和數據的網絡計算機 (NC),而這個平台的核心就是Java虛擬機,許多使Java成為萬能開發平台的屬性都源於Java虛擬機的概念和實現。以下是如干重要概念:
(1)Java虛擬機:從底層看,Java虛擬機就是以Java字節碼為指令組的軟CPU。
(2)字節碼:字節碼是Java虛擬機的指令組(很象CPU上的微碼)。
(3)即用即裝入:一個.class文件可以引用許多其它.class文件(在Java語言中,通過import, implement或extends語句實現),當運行的類需要其他類時,Java虛擬機即從網絡或本地文件系統裝入.class文件。
(4)Java認證器:認證器包括四個階段的操作:類文件認證、類型系統認證、字節碼認證和運行時類型與訪問檢查。此外,認證器在檢查期間還能識別算法操作的上溢和下溢等其他可能發生在運行期間的程序錯誤。
(5)Java效率和(Just-In-Time)JIT及時編譯技術:JIT編譯器在程序開始執行前把所有字節碼翻譯成本地機器碼,然后再將翻譯后的機器碼放在CPU上運行。
Java可移植特性
(1)JAVA作為一種編程語言:源代碼可移植性
(2)JAVA作為一個虛擬機:硬件平台可移植性
(3)JAVA作為一種虛擬的操作系統(OS)和圖形用戶界面(GUI):操作系統移植性
Java語言特性
(1)面向對象:無全局變量或函數
(2)分布式:Java包括一個支持HTTP和FTP等基於TCP/IP協議的子庫。因此,Java應用程序可憑借URL打開並訪問網絡上的對象,象本地一樣。
(3)取消了C語言的:結構,指針,#define語句,多重繼承,全局變量和函數,GOTO語句 ,操作符重載,自動類型轉換等等
(4)安全健壯:例如,邊界檢查,類型檢查,字節碼認證,自動的指針和內存管理
(5)結構中立:為了建立Java作為網絡的一個整體
(6)垃圾收集器:虛擬機自動啟動的一個線程來完成不用內存的回收,免去delete.
Java開發工具
(1)JDK:Java開發工具包
(2)Symantec café:第一個推出具有完全特性的集成開發環境的公司是Symantec。
(3)Java Workshop:Sun公司1996年中推出的全部用Java實現的集成開發環境。
(4)Visual J++:微軟推出的Visual Stutio組建之一
(5)Jbuilder:Borland公司推出的Windows和Linux平台的開發環境。
學習參考書
Thinking In Java :
作者:Bruce Eckel主頁:
http://www.BruceEckel.com
編譯:Trans Bot主頁:
http://member.netease.com/~transbot
《Java叢書》