@
什麼是 java?
Java 是近 10 年來計算機軟體發展過程中的傳奇,其在眾多開發者心中的地位可謂“愛不釋手”,與其他一些計算機語言隨著時間的流逝影響也逐漸減弱不同,Java 隨著時間的推移反而變得更加強大。
從首次釋出開始,Java 就躍到了 Internet 程式設計的前沿。後續的每一個版本都進一步鞏固了這一地位。如今,Java 依然是開發基於 Web 的應用程式的最佳選擇。此外,Java 還是智慧手機變革的推手,Android程式設計採用的就是 Java 語言。
簡單地說,Java 是由 Sun Microsystems 公司於 1995 年推出的一門物件導向程式設計語言,不僅吸收了C++語言的各種優點,還摒棄了C++難以理解的多繼承、指標等概念。2010 年 Oracle 公司收購 Sun Microsystems,之後由 Oracle 公司負責 Java 的維護和版本升級。
其實,Java 還是一個平臺。Java 平臺由 Java 虛擬機器(Java Virtual Machine,JVM)和 Java 應用程式設計介面(Application Programming Interface,API)構成。Java 應用程式設計介面為此提供了一個獨立於作業系統的標準介面,可分為基本部分和擴充套件部分。在硬體或作業系統平臺上安裝一個 Java 平臺之後,Java 應用程式就可執行。
Java 平臺已經嵌入了幾乎所有的作業系統。這樣 Java 程式只編譯一次,就可以在各種系統中執行。最受歡迎的版本為 Java 1.8。
Java 發展至今,就力圖使之無所不能。在世界程式語言排行榜中,近年來 Java 一直穩居第一名,今年7月和C換了位置。
JAVA三大體系
按應用範圍,Java 可分為 3 個體系,即 Java SE、Java EE 和 Java ME。下面簡單介紹這 3 個體系。
Java SE
Java SE(Java Platform Standard Edition,Java 平臺標準版)以前稱為 J2SE,它允許開發和部署在桌面、伺服器、嵌入式環境和實時環境中使用的 Java 應用程式。Java SE 包含了支援 Java Web 服務開發的類,併為 Java EE 提供基礎,如 Java 語言基礎、JDBC 操作、I/O 操作、網路通訊以及多執行緒等技術。如圖 所示為 Java SE 的體系結構。
Java EE
Java EE(Java Platform Enterprise Edition,Java 平臺企業版)以前稱為 J2EE。企業版本幫助開發和部署可移植、健壯、可伸縮且安全的伺服器端 Java 應用程式。Java EE 是在 Java SE 基礎上構建的,它提供 Web 服務、元件模型、管理和通訊 API,可以用來實現企業級的面向服務體系結構(Service Oriented Architecture,SOA)和 Web 2.0 應用程式。
JavaME
Java ME(Java Platform Micro Edition,Java 平臺微型版)以前稱為 J2ME,也叫 K-JAVA。 Java ME 為在移動裝置和嵌入式裝置(比如手機、PDA、電視機頂盒和印表機)上執行的應用程式提供一個健壯且靈活的環境。
Java ME 包括靈活的使用者介面、健壯的安全模型、豐富的內建網路協議以及對可以動態下載的聯網和離線應用程式。基於 Java ME 規範的應用程式 只需編寫一次就可以用於許多裝置,而且可以利用每個裝置的本機功能。
java的主要特性和優勢
Java 語言的風格很像 C 語言和 C++語言,是一種純粹的面嚮物件語言,它繼承了 C++ 語言面嚮物件的技術核心,但是拋棄了 C++ 的一些缺點,比如說容易引起錯誤的指標以及多繼承等,同時也增加了垃圾回收機制,釋放掉不被使用的記憶體空間,解決了管理記憶體空間的煩惱。相對於C 和 C++ 來說,java主要的優勢是 跨平臺性 和 垃圾回收機制(GC)。
Java 語言是一種分散式的面嚮物件語言,具有物件導向、平臺無關性、簡單性、解釋執行、多執行緒、安全性等很多特點,下面針對這些特點進行逐一介紹。
1. 物件導向
Java 是一種物件導向的語言,它對物件中的類、物件、繼承、封裝、多型、介面、包等均有很好的支援。為了簡單起見,Java 只支援類之間的單繼承,但是可以使用介面來實現多繼承。使用 Java 語言開發程式,需要採用物件導向的思想設計程式和編寫程式碼。
2. 平臺無關性
平臺無關性的具體表現在於,Java 是“一次編寫,到處執行(Write Once,Run any Where)”的語言,因此採用 Java 語言編寫的程式具有很好的可移植性,而保證這一點的正是 Java 的虛擬機器機制。在引入虛擬機器之後,Java 語言在不同的平臺上執行不需要重新編譯。
3. 可移植性
Java 語言使用 Java 虛擬機器機制遮蔽了具體平臺的相關資訊,使得 Java 語言編譯的程式只需生成虛擬機器上的目的碼,就可以在多種平臺上不加修改地執行。另外,Java還嚴格規定了各個基本資料型別的長度。Java系統本身也具有很強的可移植性,Java編譯器是用Java實現的,Java的執行環境是用ANSI C實現的。
4. 簡單性
Java 語言的語法與 C 語言和 C++ 語言很相近,使得很多程式設計師學起來很容易。對 Java 來說,它捨棄了很多 C++ 中難以理解的特性,如操作符的過載和多繼承等,而且 Java 語言不使用指標,加入了垃圾回收機制,解決了程式設計師需要管理記憶體的問題,使程式設計變得簡單。
5. 解釋執行
Java 程式在 Java 平臺執行時會被編譯成位元組碼檔案,然後可以在有 Java 環境的作業系統上執行。在執行檔案時,Java 的直譯器對這些位元組碼進行解釋執行,執行過程中需要加入的類在連線階段被載入到執行環境中。
6. 多執行緒
Java 語言是多執行緒的,這也是 Java 語言的一大特性,它必須由 Thread 類和它的子類來建立。Java 支援多個執行緒同時執行,並提供多執行緒之間的同步機制(關鍵字為synchronized)。任何一個執行緒都有自己的 run() 方法,要執行的方法就寫在 run() 方法體內。
7. 分散式
Java 語言支援 Internet 應用的開發,在 Java 的基本應用程式設計介面中就有一個網路應用程式設計介面,它提供了網路應用程式設計的類庫,包括 URL、URLConnection、Socket 等。Java 的 RIM(遠端方法啟用) 機制也是開發分散式應用的重要手段。
8. 健壯性
Java 的強型別機制、異常處理、垃圾回收機制等都是 Java 健壯性的重要保證。對指標的丟棄是 Java 的一大進步。另外,Java 的異常機制也是健壯性的一大體現。
9. 高效能
Java 的高效能主要是相對其他高階指令碼語言來說的,隨著 JIT(Just in Time)的發展,Java 的執行速度也越來越高。
10. 安全性
Java 通常被用在網路環境中,為此,Java 提供了一個安全機制以防止惡意程式碼的攻擊。除了 Java 語言具有許多的安全特性以外,Java 還對通過網路下載的類增加一個安全防範機制(類ClassLoader),分配不同的名字空間以防替代本地的同名類,幷包含安全管理機制,(類SecurityManager)讓Java應用設定安全哨兵。
11.動態性
Java語言的設計目標之一是適應於動態變化的環境。Java程式需要的類能夠動態地被載入到執行環境,也可以通過網路來載入所需要的類。這也有利於軟體的升級。另外,Java中的類有一個執行時刻的表示,能進行執行時刻的型別檢查。
Java 語言的眾多特性使其在眾多的程式語言中佔有較大的市場份額,Java 語言對物件的支援和強大的 API 使得程式設計工作變得更加容易和快捷,大大降低了程式的開發成本。Java 的“一次編寫,到處執行”正是它吸引眾多商家和程式設計人員的一大優勢。
java程式的執行機制
Java 程式的執行必須經過編寫、編譯和執行 3 個步驟
- 編寫:是指在 Java 開發環境中進行程式程式碼的輸入,最終形成字尾名為 .java 的 Java 原始檔。
- 編譯:是指使用 Java 編譯器對原始檔進行錯誤排査的過程,編譯後將生成字尾名為 .class 的位元組碼檔案。
- 執行:是指使用 Java 直譯器將位元組碼檔案翻譯成機器程式碼,執行並顯示結果。
Java 程式執行流程如圖 1 所示。
位元組碼檔案:是一種和任何具體機器環境及作業系統環境無關的中間程式碼。它是一種二進位制檔案,是 Java 原始檔由 Java 編譯器編譯後生成的目的碼檔案。程式設計人員和計算機都無法直接讀懂位元組碼檔案,它必須由專用的 Java 直譯器來解釋執行,因此 Java 是一種在編譯基礎上進行解釋執行的語言。
Java 直譯器負責將位元組碼檔案翻譯成具體硬體環境和作業系統平臺下的機器程式碼,以便執行。因此 Java 程式不能直接執行在現有的作業系統平臺上,它必須執行在被稱為 Java 虛擬機器的軟體平臺之上。
Java 虛擬機器(JVM):是執行 Java 程式的軟體環境,Java 直譯器是 Java 虛擬機器的一部分。在執行 Java 程式時,首先會啟動 JVM,然後由它來負責解釋執行 Java 的位元組碼程式,並且 Java 位元組碼程式只能執行於 JVM 之上。這樣利用 JVM 就可以把 Java 位元組碼程式和具體的硬體平臺以及作業系統環境分隔開來,只要在不同的計算機上安裝了針對特定平臺的 JVM,Java 程式就可以執行,而不用考慮當前具體的硬體平臺及作業系統環境,也不用考慮位元組碼檔案是在何種平臺上生成的。
JVM 把這種不同軟、硬體平臺的具體差別隱藏起來,從而實現了真正的二進位制程式碼級的跨平臺移植。JVM 是 Java 平臺架構的基礎,Java 的跨平臺特性正是通過在 JVM 中執行 Java 程式實現的。
Java 的這種執行機制可以通過下圖來說明。
Java 語言這種“一次編寫,到處執行”的方式,有效地解決了目前大多數高階程式設計語言需要針對不同系統來編譯產生不同機器程式碼的問題,即硬體環境和操作平臺的異構問題,大大降低了程式開發、維護和管理的開銷。
注意:Java 程式通過 JVM 可以實現跨平臺特性,但 JVM 是不跨平臺的。也就是說,不同作業系統之上的 JVM 是不同的,Windows 平臺之上的 JVM 不能用在 Linux 平臺,反之亦然。
JDK 、JRE、JVM
- JDK (Java SE Development Kit),Java標準開發包,它提供了編譯、執行Java程式所需的各種工具和資源,包括Java編譯器、Java執行時環境,以及常用的Java類庫等。
- JRE ( Java Runtime Environment) 、Java執行環境,用於解釋執行Java的位元組碼檔案。普通使用者而只需要安裝 JRE(Java Runtime Environment)來執行 Java 程式。而程式開發者必須安裝JDK來編譯、除錯程式。
- JVM(Java Virtual Machine):Java虛擬機器,是JRE的一部分。它是整個java實現跨平臺的最核心的部分,負責解釋執行位元組碼檔案,是可執行java位元組碼檔案的虛擬計算機。所有平臺的上的JVM向編譯器提供相同的介面,而編譯器只需要面向虛擬機器,生成虛擬機器能識別的程式碼,然後由虛擬機器來解釋執行。JVM是一種用於計算裝置的規範,它是一個虛構出來的計算機,是通過在實際的計算機上模擬模擬各種計算機功能來實現的。
任何語言或者軟體的執行都需要環境。就像人要生活在空氣中,魚要活在水中,喜陰植物就不能放在陽光下暴曬一樣,任何物件個體的存在都離不開其所需要的環境,程式語言亦是一樣的。Java 語言的開發執行,也離不開 Java 語言的執行環境 JRE。沒有 JRE 的支援,Java 語言便無法執行。當然,如果還想編譯 Java 程式,搞搞小開發的話,JRE 是明顯不夠了,這時候就需要 JDK。其實,JDK 就是 JRE 加上一些常用工具組成的。JDK 不僅能執行已經被編譯好了的 Java 程式,還能支援我們編譯 Java 程式(JDK=JER+各種工具)。
JDK,JVM 和 JRE,他們三個到底有什麼區別?又有什麼聯絡?
- JDK(Java Development Kid,Java 開發開源工具包),是針對 Java 開發人員的產品,是整個 Java 的核心,包括了 Java 執行環境 JRE、Java 工具和 Java 基礎類庫。
- JRE(Java Runtime Environment,Java 執行環境)是執行 JAVA 程式所必須的環境的集合,包含 JVM 標準實現及 Java 核心類庫。
- JVM(Java Virtual Machine,Java 虛擬機器)是整個 Java 實現跨平臺的最核心的部分,能夠執行以 Java 語言寫作的軟體程式。負責解釋執行位元組碼檔案,是可執行java位元組碼檔案的虛擬計算機。所有平臺的上的JVM向編譯器提供相同的介面,而編譯器只需要面向虛擬機器,生成虛擬機器能識別的程式碼,然後由虛擬機器來解釋執行。JVM是一種用於計算裝置的規範,它是一個虛構出來的計算機,是通過在實際的計算機上模擬模擬各種計算機功能來實現的。
三者的關係如下圖所示:
由圖中可以看出以下幾點:
- JDK= JRE + 多種Java開發工具
- JRE= JVM + 各種類庫
- 這三者的關係是一層層的巢狀關係。JDK > JRE > JVM
java的程式設計規範
首先要求程式中的各個要素都遵守命名規則,然後在編碼中嚴格按照編碼格式編寫程式碼。命名規則包括以下幾點。
- 包的名稱由一個小寫字母序列組成。
- 類的名稱由大寫字母開頭,其他字母都由小寫的單片語成。
- 類的例項的名稱由一個小寫字母開頭,後面的單詞由大寫字母開頭。
- 常量的名稱都大寫,並且指出完整含義。
- 引數的名稱無其他具體規定。
- 陣列的命名使用“型別[] 陣列名”的形式。
另外,編碼格式規定如下。
- 程式最開始編寫匯入包和類語句,即 import 語句。import 語句可以有多行,編寫完 import 語句後空一行。
- 定義 public 類,頂格書寫。類的主體左括號“{”不換行書寫,右括號“}”頂格書寫。
- 定義 public 類中的變數,縮排書寫。
- 定義方法用縮排書寫,方法的左括號“{”不換行書寫,右括號“}”和方法首行第一個字元對齊。方法體要再次縮排書寫,最後一個變數定義和第一個方法定義之間、方法和方法之間最好空一行。