Java最先有SUN公司(已被Oracle收購)的詹姆斯高斯林在上個世紀90年代初開發的一種編程語言,最初被命名爲Oak,目標是針對小型家電設備的嵌入式應用,結果市場沒啥反響。誰料到互聯網的崛起,讓Oak從新煥發了生機,因而SUN公司改造了Oak,在1995年以Java的名稱正式發佈,緣由是Oak已經被人註冊了,所以SUN註冊了Java這個商標。隨着互聯網的高速發展,Java逐漸成爲最重要的網絡編程語言。java
Java介於編譯型語言和解釋型語言之間。編譯型語言如C、C++,代碼是直接編譯成機器碼執行,可是不一樣的平臺(x8六、ARM等)CPU的指令集不一樣,所以,須要編譯出每一種平臺的對應機器碼。解釋型語言如Python、Ruby沒有這個問題,能夠由解釋器直接加載源碼而後運行,代價是運行效率過低。而Java是將代碼編譯成一種「字節碼」,它相似於抽象的CPU指令,而後,針對不一樣平臺編寫虛擬機,不一樣平臺的虛擬機負責加載字節碼並執行,這樣就實現了「一次編寫,處處運行」的效果。固然,這是針對Java開發者而言。對於虛擬機,須要爲每一個平臺分別開發。爲了保證不一樣平臺、不一樣公司開發的虛擬機都能正確執行Java字節碼,SUN公司制定了一系列的Java虛擬機規範。從實踐的角度看,JVM的兼容性作得很是好,低版本的Java字節碼徹底能夠正常運行在高版本的JVM上。數據庫
隨着Java的發展,SUN給Java又分出三個不一樣版本編程
Java SE:Standard Edition Java EE:Enterprise Edition Java ME:Micro Edition
這三者之間有什麼關係呢服務器
簡單來講,Jave SE就是標準版,包含標準的JVM和標準庫,而Java EE是企業版,它是在Java SE的基礎上加上了大量的API和庫,以便方便開發Web應用,數據庫,消息服務等,Jave EE的應用使用的虛擬機和Java SE徹底相同。網絡
Java ME就和Java SE不一樣,它是一個針對嵌入式設備的「瘦身版」,Java SE的標準庫沒法在Java ME上使用,Java ME的虛擬機也是「瘦身版」。框架
毫無疑問,Java SE是整個Java平臺的核心,而Java EE是進一步學習Web應用所必須的。咱們熟悉的Spring等框架都是Java EE開源生態系統的一部分。不幸的是,Java ME歷來沒有真正流行起來,反而是Android開發成爲了移動平臺的標準之一,所以,沒有特殊需求,不建議學習Java ME。編程語言
JDK,JRE工具
JDK:Java Development Kit JRE:Java Runtime Environment
簡單地說,JRE就是運行Java字節碼的虛擬機。可是,若是隻有Java源碼,要編譯成Java字節碼,就須要JDK,由於JDK除了包含JRE,還提供了編譯器、調試器等開發工具。學習
兩者關係以下開發工具
要學習Java開發,固然須要安裝JDK了。
JSR,JCP
JSR規範:Java Specification Request JCP組織:Java Community Process
爲了保證Java語言的規範性,SUN公司搞了一個JSR規範,凡是想給Java平臺加一個功能,好比說訪問數據庫的功能,你們要先建立一個JSR規範,定義好接口,這樣,各個數據庫廠商都按照規範寫出Java驅動程序,開發者就不用擔憂本身寫的數據庫代碼在MySQL上能跑,卻不能跑在PostgreSQL上。
因此JSR是一系列的規範,從JVM的內存模型到Web程序接口,所有都標準化了。而負責審覈JSR的組織就是JCP。
一個JSR規範發佈時,爲了讓你們有個參考,還要同時發佈一個「參考實現」,以及一個「兼容性測試套件」:
RI:Reference Implementation TCK:Technology Compatibility Kit
好比有人提議要搞一個基於Java開發的消息服務器,這個提議很好啊,可是光有提議還不行,得貼出真正能跑的代碼,這就是RI。若是有其餘人也想開發這樣一個消息服務器,如何保證這些消息服務器對開發者來講接口、功能都是相同的?因此還得提供TCK。
一般來講,RI只是一個「能跑」的正確的代碼,它不追求速度,因此,若是真正要選擇一個Java的消息服務器,通常是沒人用RI的,你們都會選擇一個有競爭力的商用或開源產品。