Core Java(一):Java程式設計概述
Java “白皮書”的關鍵術語
- 簡單性
- 面向物件
- 分散式
- 健壯性
- 安全性
- 體系結構中立
- 可移植性
- 解釋型
- 高效能
- 多執行緒
- 動態性
簡單性
Java語法是C++語法的一個“純淨”版本。這裡沒有標頭檔案、指標運算(甚至指標語法)、結構、聯合、操作符過載、虛基類等。
面向物件
Java的面向物件特性與C++旗鼓相當。Java與C++的主要不同在於多重繼承,在Java中,取而代之的是更簡單的介面概念。與C++相比,Java提供了更豐富的執行時自省功能。
分散式
Java有一個豐富的例程庫,用於處理像HTTP和FTP之類的TCP/IP協議。Java應用程式能夠通過URL開啟和訪問網路上的物件,其便捷程度就好像訪問本地檔案一樣。
健壯性
Java投入了大量的精力進行早期的問題檢測、後期動態的(執行時)檢測,並消除了容易出錯的情況…Java和C++最大的不同在於Java才用的指標模型可以消除重寫記憶體和損壞資料的可能性。
Java編譯器能夠檢測許多在其他語言中僅在執行時才能夠檢測出來的問題。
安全性
Java適用於網路/分散式環境。為了達到這個目標,在安全方面投入了很大精力。使用Java可以構建防病毒、防篡改的系統。
從一開始,Java就設計成能夠防範各種攻擊,其中包括:
- 執行時堆疊溢位。如蠕蟲和病毒常用的攻擊手段。
- 破壞自己的堆疊空間之外的記憶體。
- 未經授權讀寫檔案。
體系結構中立
編譯器生成一個體繫結構中立的目標檔案格式,這是一種編譯過的程式碼,只要有Java執行時系統,這些編譯後的程式碼可以在許多處理器上執行。
當然,解釋虛擬機器指令肯定會比全速執行機器指令慢很多。然而,虛擬機器有一個選項,可以將執行最頻繁的位元組碼序列翻譯成機器碼。這一過程被稱為即時編譯。
可移植性
與C和C++不同,Java規範中沒有“依賴具體實現”的地方。基本資料型別的大小以及有關運算都做了明確的說明。
Java中int永遠為32位的整數,而在C/C++中,int可能是16位整數、32位整數,也可能是編譯器提供商指定的其他的大小。唯一的限制只是int型別的大小不能低於short int,並且不能高於long int。在Java中,資料型別具有固定的大小,這消除了程式碼移植時令人頭痛的主要問題。二進位制資料以固定的格式進行儲存和傳輸,消除了位元組順序的困擾。字串使用標準的Unicode格式儲存的。
除了與使用者介面有關的部分外,所有其它Java庫都能很好地支援平臺獨立性。你可以處理檔案、正則表示式、XML、日期和時間、資料庫、網路連線、執行緒等,而不用操心底層作業系統。
解釋型
Java 直譯器可以在任何移植瞭解釋器的機器上執行Java位元組碼。由於連結是一個增量式且輕量級的過程,所以,併發過程也變得更加快捷,更加具有探索性。
高效能
儘管對解釋後的位元組碼效能已經比較滿意,但在有些場合下還需要更加高效的效能。位元組碼可以(在執行時刻)動態地翻譯成對應執行這個應用的特定CPU的機器碼。
多執行緒
多執行緒可以帶更好的互動響應和事實行為。
動態性
從各種角度看,Java和C或C++相比更加具有動態性。它能夠適應不斷髮展的環境。庫中可以自由地新增新方法和例項變數,而對客戶端卻沒有任何影響。在Java中找出執行時型別資訊十分簡單。
Java發展簡史
Java語言的發展狀況:
版本 | 年份 | 語言新特性 | 類與介面的數量 |
---|---|---|---|
1.0 | 1996 | 語言本身 | 211 |
1.1 | 1997 | 內部類 | 477 |
1.2 | 1998 | strictfp修飾符 | 1524 |
1.3 | 2000 | 無 | 1840 |
1.4 | 2002 | 斷言 | 2723 |
5.0 | 2004 | 泛型類、“for each”迴圈、可變元引數、自動裝箱、元資料、列舉、靜態匯入 | 3279 |
6 | 2006 | 無 | 3793 |
7 | 2011 | 基於字串的switch、鑽石操作符、二進位制字面量、異常處理改進 | 4024 |
8 | 2014 | lambda表示式、包含預設方法的介面,流和日期/時間庫 | 4240 |
參考:書籍《Java核心技術 卷I》