1. 程式人生 > >Java相關的特性及Java白皮書的關鍵術語(7Gosling)

Java相關的特性及Java白皮書的關鍵術語(7Gosling)

 JAVA是一種程式語言和環境,旨在解決現代程式設計實踐中的許多問題。 它最初是為消費電子產品開發先進軟體的一個重要專案的一部分。 這些是可靠的行動式分散式實時嵌入式系統。

1.簡單性

2.面向物件

       不幸的是,這是業內最被濫用的流行語之一。 面向物件的設計仍然非常強大,因為它有助於介面的清晰定義,並且可以提供可重用的“軟體IC”。面向物件設計的簡單定義是它是一種將設計集中在資料(=物件)上的技術。 它的介面。 與木工類比,“面向物件”的木匠主要關心的是他正在建造的椅子,其次是用於製造它的工具; 一個“非OO”的木匠會主要考慮他的工具。 這也是定義模組如何“即插即用”的機制

3.分散式

       有時網路被整合到語言和執行時系統中(幾乎)透明。 物件可以是遠端的:當應用程式具有指向物件的指標時,該物件可以存在於同一臺機器上,也可以存在於網路上的其他機器上。 遠端物件上的方法呼叫被轉換為RPC(遠端過程呼叫)。分散式應用程式看起來非常像非分散式應用程式。 兩種情況都使用了基本相似的程式設計模型。 但是,分散式案例確實要求應用程式注意網路故障的後果。 該系統自動處理了大部分問題,但有些問題需要根據具體情況進行處理。從那時起,該模型大部分已經消失:對現有網路環境中生活的語用學做出讓步。 主要是因特網。因此,JAVA現在有一個非常廣泛的例程庫,可以輕鬆地使用TCP和IP協議,如http和ftp.JAVA應用程式可以通過URL開啟和訪問網路,同時程式設計師可以輕鬆訪問本地檔案系統

4.健壯性

        JAVA旨在編寫需要在各種方面可靠的程式。 有很多強調早期檢查可能的問題,後來的動態(執行時)檢查,以及消除錯誤的情況。強型別語言(如C ++)的一個優點是它允許進行大量的編譯時檢查所以bug 可以早點找到。 不幸的是,C ++從C中繼承了許多漏洞,這是相對寬鬆的(主要問題是方法/過程宣告)。 InJAVA,isquire宣告並且不支援C樣式隱式宣告。連結器理解型別系統並重復編譯器的許多型別檢查以防止版本不匹配問題。之前提到過,自動垃圾收集避免了儲存分配問題。單個最大的 JAVA和C / C ++之間的區別在於JAVA具有一個指標模型,可以消除覆蓋記憶體和破壞資料的可能性。 JAVA沒有指標運算,而是具有真正的陣列。 這允許執行子標記檢查。 並且不可能通過強制轉換將任意整數轉換為指標。

5.安全性

      JAVA旨在用於網路/分散式情況。 為了安全起見,很多重點都放在了安全性上.JAV可以構建無病毒,無篡改的系統。 身份驗證技術基於公鑰加密。“健壯”和“安全”之間存在強大的相互作用。 例如,對指標語義的更改使得應用程式無法訪問資料結構或訪問它們可以訪問的物件中的私有資料。 這關閉了大多數病毒活動的大門。

6.體系結構中立

        JAVA旨在支援網路上的應用程式。 通常,網路由具有各種CPU和作業系統體系結構的各種系統組成。 為了使aJAVA應用程式能夠在網路上的任何地方執行,編譯器生成體系結構中立的目標檔案格式 - 在JAVA執行時存在的情況下,編譯的程式碼可在許多處理器上執行。這不僅適用於網路,也適用於單個系統 softwaredistribution。 在目前的個人計算機市場中,應用程式編寫者必須生成與IBM PC和Apple Macintosh相容的應用程式版本。 隨著PC市場(通過Windows / NT)多樣化到許多CPU架構,而蘋果公司將68000轉向PowerPC,這使得在所有平臺上執行的軟體的生產幾乎不可能。 WithJAVA,所有平臺上的相同版本的應用程式.JAVA編譯器通過生成與特定計算機體系結構無關的位元組碼指令來完成此操作。 相反,它們的設計既易於在任何機器上進行解釋,又可以輕鬆地轉換為本機程式碼。

7.可移植性

        架構中立是行動式的一大塊,但還有更多內容。 與C和C ++不同,規範中沒有“依賴於實現”的方面。 指定原始資料型別的大小,以及對它們的算術行為。 例如,“int”始終表示asigned twos補充32位整數,“float”始終表示32位IEEE754浮點數。 在這個時代做出這些選擇是可行的,因為基本上所有有趣的CPU都具有這些特性。作為系統一部分的庫定義了可移植介面。 例如,有一個抽象的Window類及其針對Unix,Windows和Mac的實現.TheJAVAsystem本身非常便攜。 新的編譯器是用Java編寫的,執行時是用ANSI C編寫的,具有乾淨的可移植性邊界。 可移植性邊界基本上是POSIX

8.解釋型

       JAVA直譯器可以直接在直譯器已被移植的任何機器上執行JAVA位元組碼。 而且因為連結更加增量†Windows和Mac版本尚未完成。 JAVA6的10和輕量級程序,開發過程可以更加快速和開發。作為位元組碼流的一部分,更多的編譯時資訊在執行時可用。 這是連結器的型別檢查所基於的,以及RPC協議派生的基礎。 它還使程式更易於除錯。

9.高效能

       如果解釋的位元組碼的效能通常綽綽有餘,則有些情況下需要更高的效能。 位元組程式碼可以在執行時(在執行時)轉換為執行應用程式的特定CPU的機器程式碼。 對於那些習慣於編譯和動態載入器的正常設計的人來說,這有點像將最終的機器程式碼生成器放在動態載入器中。位元組程式碼格式的設計考慮到了這一點,因此生成機器程式碼的實際過程通常很簡單。 產生了相當好的程式碼:它執行自動暫存器分配,並且編譯器在生成位元組碼時會進行一些優化。在解釋程式碼中,我們在SS10上每秒獲得大約300,000個方法呼叫。 轉換為機器程式碼的位元組碼的效能幾乎與本機C或C ++無法區分。

10.多執行緒

        我們周圍的世界同時發生著許多事情。多執行緒是一種構建由多執行緒構建的應用程式的方法†。 不幸的是,在常規單執行緒C和C ++樣式中編寫處理許多事情的程式可能要困難得多.JAVA有一套複雜的同步原語,這些原語基於廣泛使用的監視器和條件變數範例

11.動態性

         在許多方面,JAVA是一種比C或C ++更動態的語言。 它被設計為適應不斷變化的環境。例如,在生產環境中使用C ++的一個大問題是它始終實現的方式的副作用。 如果公司A生成一個類庫(即插即用元件庫),並且公司B購買它並在其產品中使用它,那麼如果A更改它的庫並分發新版本,那麼B幾乎肯定必須重新編譯和重新分發它們的軟體。 在終端使用者獨立獲得A andB軟體的環境中(比如A是OS供應商而B是應用程式),如果A將升級分發到其庫,那麼來自B的所有使用者軟體都將中斷。 可以在C ++中避免這個問題,但它非常困難,並且它實際上意味著不直接使用任何語言的o功能