Java是一門物件導向程式語言,不僅吸收了C++語言的各種優點,還摒棄了C++裡難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。Java語言作爲靜態物件導向程式語言的代表,極好地實現了物件導向理論,允許程式設計師以優雅的思維方式進行復雜的程式設計 。
1991年4月,Sun公司成立了Green專案小組,專攻智慧家電的嵌入式控制系統。由James Gosling博士領導的綠色計劃(Green Project)開始啓動,此計劃的目的是開發一種能夠在各種消費性電子產品(如機上盒、冰箱、收音機等)上執行的程式架構。這個計劃的產品就是Java語言的前身:Oak(橡樹)。Oak當時在消費品市場上並不算成功,但隨着1995年網際網路潮流的興起,Oak迅速找到了最適合自己發展的市場定位並蛻變成爲Java語言。
1995年5月23日,Oak語言改名爲Java,並且在SunWorld大會上正式發佈Java 1.0版本。Java語言第一次提出了「Write Once,Run Anywhere」的口號。
1996年4月,10個最主要的操作系統供應商申明將在其產品中嵌入Java技術。同年9月,已有大約8.3萬個網頁應用了Java技術來製作。在1996年5月底,Sun公司於美國舊金山舉行了首屆JavaOne大會,從此JavaOne成爲全世界數百萬Java語言開發者每年一度的技術盛會。
1998年12月8日,Java 2企業平臺J2EE發佈 (J2EE1.2)
1999年4月27日,HotSpot虛擬機發布,HotSpot最初由一家名爲「Longview Technologies」的小公司開發,因爲HotSpot的優異表現,這家公司在1997年被Sun公司收購了。HotSpot虛擬機發布時是作爲JDK 1.2的附加程式提供的,後來它成爲了JDK 1.3及之後所有版本的Sun JDK的預設虛擬機器。
1999年6月,發佈Java的三個版本:J2SE、J2EE、J2ME
2005年6月,Java SE6.0發佈,J2EE更名爲Java EE,J2SE更名爲Java SE,J2ME更名爲Java ME
2009年4月20日,Oracle公司宣佈正式以74億美元的價格收購Sun公司,Java商標從此正式歸Oracle所有(Java語言本身並不屬於哪間公司所有,它由JCP組織進行管理,儘管JCP主要是由Sun公司或者說Oracle公司所領導的)。由於此前Oracle公司已經收購了另外一家大型的中介軟體企業BEA公司,在完成對Sun公司的收購之後,Oracle公司分別從BEA和Sun中取得了目前三大商業虛擬機器的其中兩個:JRockit和HotSpot,Oracle公司宣佈在未來1~2年的時間內,將把這兩個優秀的虛擬機器互相取長補短,最終合二爲一。可以預見在不久的將來,Java虛擬機器技術將會產生相當巨大的變化。
2011年7月28日,Oracle公司發佈Java SE 1.7
2014年3月18日,Oracle公司發表Java SE 1.8,代表性技術包括:Lambda表達式、函數式介面、方法參照和構造器呼叫、Stream API、介面中的預設方法和靜態方法、Optional 類、新時間日期API等
2017年9月21日,JDK 1.9發佈,代表性技術包括:Java 平臺級模組系統,Linking,JShell (互動式 Java REPL),改進的 Javadoc,改進的 Stream API,集合工廠方法,私有介面方法,HTTP/2,多版本相容 JAR。
2018年3月14日,JDK 1.10發佈。
Java語言是簡單的:
Java語言的語法與C語言和C++語言很接近,使得大多數程式設計師很容易學習和使用。另一方面,Java丟棄了C++中很少使用的、很難理解的、令人迷惑的那些特性,如操作符過載、多繼承、自動的強制型別轉換。特別地,Java語言不使用指針,而是參照。並提供了自動的廢料收集,使得程式設計師不必爲記憶體管理而擔憂。
Java語言是物件導向的:
Java語言提供類、介面和繼承等物件導向的特性,爲了簡單起見,只支援類之間的單繼承,但支援介面之間的多繼承,並支援類與介面之間的實現機制 機製(關鍵字爲implements)。Java語言全面支援動態系結,而C++語言只對虛擬函式使用動態系結。總之,Java語言是一個純的物件導向程式設計語言。
Java語言是分佈式的:
Java語言支援Internet應用的開發,在基本的Java應用程式設計介面中有一個網路應用程式設計介面(java net),它提供了用於網路應用程式設計的類庫,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(遠端方法啓用)機制 機製也是開發分佈式應用的重要手段。
Java語言是健壯的:
Java的強型別機制 機製、例外處理、垃圾的自動收集等是Java程式健壯性的重要保證。對指針的丟棄是Java的明智選擇。Java的安全檢查機制 機製使得Java更具健壯性。
Java語言是安全的:
Java通常被用在網路環境中,爲此,Java提供了一個安全機制 機製以防惡意代碼的攻擊。除了Java語言具有的許多安全特性以外,Java對通過網路下載的類具有一個安全防範機制 機製(類ClassLoader),如分配不同的命名空間以防替代原生的同名類、位元組程式碼檢查,並提供安全管理機制 機製(類SecurityManager)讓Java應用設定安全哨兵。
Java語言是體系結構中立的:
Java程式(後綴爲java的檔案)在Java平臺上被編譯爲體系結構中立的位元組碼格式(後綴爲class的檔案),然後可以在實現這個Java平臺的任何系統中執行。這種途徑適合於異構的網路環境和軟體的分發。
Java語言是可移植的:
這種可移植性來源於體系結構中立性,另外,Java還嚴格規定了各個基本數據型別的長度。Java系統本身也具有很強的可移植性,Java編譯器是用Java實現的,Java的執行環境是用ANSI C實現的。
Java語言是解釋型的:
如前所述,Java程式在Java平臺上被編譯爲位元組碼格式,然後可以在實現這個Java平臺的任何系統中執行。在執行時,Java平臺中的Java直譯器對這些位元組碼進行解釋執行,執行過程中需要的類在聯接階段被載入到執行環境中。
Java是高效能的:
與那些解釋型的高階指令碼語言相比,Java的確是高效能的。事實上,Java的執行速度隨着JIT(Just-In-Time)編譯器技術的發展越來越接近於C++。
Java語言是多執行緒的:
在Java語言中,執行緒是一種特殊的物件,它必須由Thread類或其子(孫)類來建立。通常有兩種方法來建立執行緒:其一,使用型構爲Thread(Runnable)的構造子類將一個實現了Runnable介面的物件包裝成一個執行緒,其二,從Thread類派生出子類並重寫run方法,使用該子類建立的物件即爲執行緒。值得注意的是Thread類已經實現了Runnable介面,因此,任何一個執行緒均有它的run方法,而run方法中包含了執行緒所要執行的程式碼。執行緒的活動由一組方法來控制。Java語言支援多個執行緒的同時執行,並提供多執行緒之間的同步機制 機製(關鍵字爲synchronized)。
Java語言是動態的:
Java語言的設計目標之一是適應於動態變化的環境。Java程式需要的類能夠動態地被載入到執行環境,也可以通過網路來載入所需要的類。這也有利於軟體的升級。另外,Java中的類有一個執行時刻的表示,能進行執行時刻的型別檢查。
三大版本
Java SE(Java Platform,Standard Edition)。Java SE 以前稱爲 J2SE。它允許開發和部署在桌面、伺服器、嵌入式環境和實時環境中使用的 Java 應用程式。Java SE 包含了支援 Java Web 服務開發的類,併爲 Java Platform,Enterprise Edition(Java EE)提供基礎。
Java EE(Java Platform,Enterprise Edition)。這個版本以前稱爲 J2EE。企業版本幫助開發和部署可移植、健壯、可伸縮且安全的伺服器端 Java 應用程式。Java EE 是在 Java SE 的基礎上構建的,它提供 Web 服務、元件模型、管理和通訊 API,可以用來實現企業級的面向服務體系結構(service-oriented architecture,SOA)和 Web 2.0 應用程式。
Java ME(Java Platform,Micro Edition)。這個版本以前稱爲 J2ME。Java ME 爲在移動裝置和嵌入式裝置(比如手機、PDA、電視機上盒和印表機)上執行的應用程式提供一個健壯且靈活的環境。Java ME 包括靈活的用戶介面、健壯的安全模型、許多內建的網路協定以及對可以動態下載的連網和離線應用程式的豐富支援。基於 Java ME 規範的應用程式只需編寫一次,就可以用於許多裝置,而且可以利用每個裝置的本機功能。
Java技術體系圖
下圖爲Oracle官網提供的Java技術體系圖
JVM、JRE和JDK的關係
JVM : Java Virtual Machine是Java虛擬機器,Java程式需要執行在虛擬機器上,不同的平臺有自己的虛擬機器,因此Java語言可以實現跨平臺。
**JRE : **Java Runtime Environment包括Java虛擬機器和Java程式所需的核心類庫等。核心類庫主要是java.lang包:包含了執行Java程式必不可少的系統類,如基本數據型別、基本數學函數、字串處理、執行緒、例外處理類等,系統預設載入這個包
如果想要執行一個開發好的Java程式,計算機中只需要安裝JRE即可。
JVM&JRE&JDK關係圖