Java的不斷發展要歸功于C、C++ 和C# 等編程語言的不斷挑戰。C++、C#和Java等編程語言基本上都來源于C語言但又有很多區別。業內人士經常將C比作爺爺,C++比做兒子,C# 和Java等語言比作孫子。
對于變量聲明、參數傳遞、操作符、流控制等,Java使用了和C、C++、C# 相同的傳統,而C++ 主要是對C的擴展并融入了面向對象的思想,C#和Java語言是純粹的面向對象的編程語言并吸收了C、C++ 語言的很多優點,摒棄了很多缺點,但C#編程語言的運行依賴于Windows平臺,而Java語言不依賴于任何平臺,因此使得熟悉C、C++、C#的程序員能夠很方便地轉向Java編程。具體描述有如下幾點。
Java與C、C++對比
1) 全局變量
在Java編程的過程中,不能在類之外定義全局變量,如:
public String name; //錯,不能在類之外定義全局變量
public class GlobalVar{
public static global_var; //全局變量也叫成員變量或成員屬性
}
要定義全局變量,只能通過在一個類中定義公用、靜態的變量來實現一個全局變量。在類GlobalVar中定義變量global_var為public static,使得其他類可以訪問和修改該變量。Java對全局變量進行了更好的封裝。而在C和C++ 中,依賴于不加封裝的全局變量常常造成系統的崩潰。
2) 剔除goto關鍵字
雖然在Java中將關鍵字goto保留了,但是Java不支持C、C++ 中的goto語句,而是通過異常處理語句try、Catch、final等來代替C、C++ 中用goto語句來處理遇到錯誤時跳轉的情況,使程序更易讀且更結構化。
3) 良好的指針控制
指針是C、C++ 編程語言中最有魅力的特性,但它的超高使用難度加上超高靈活性,使得大部分程序員望而止步,在學習C、C++ 語言進行編程的過程中,通過指針所進行的內存地址操作常常會造成不可預知的錯誤,同時通過指針對某個內存地址進行顯式類型轉換后,可以訪問一個C或C++ 中的私有成員,從而破壞安全性,造成系統的崩潰。而Java語言對指針進行完全的控制,程序員不能直接進行任何指針操作,例如把整數轉化為指針,或者通過指針釋放某一內存地址等。同時,數組作為類在Java中實現,較好地解決了數組訪問越界這一問題。
4) 自動內存回收
一般內存資源有限,很容易被程序破壞。在C中,程序員通過庫函數malloc()和free()來分配和釋放內存,在C++ 中則通過運算符new和delete來分配和釋放內存。再次釋放已釋放的內存塊或未被分配的內存塊,會造成系統的崩潰;同樣,忘記釋放不再使用的內存塊也會逐漸耗盡系統資源。而在Java中,所有的數據結構都是對象,通過運算符new為它們分配內存堆。通過運算符new可以得到對象的處理權,而實際分配給對象的內存可能隨程序運行而改變,Java對此自動地進行管理并且進行垃圾收集,有效防止了由于程序員的誤操作而導致的錯誤,并且更好地利用了系統資源。
5) 固定的數據類型
在C、C++ 語言中不同數據類型在不同的平臺上所占的位數不一樣,例如,int類型的數據在IBM PC中占16位,在VAX-II中占32位,這就導致了代碼的不可移植性。但在Java中,對于這些數據類型都采用國際統一字符編碼,即分配固定長度的位數,例如,對int類型的數據,它在任何機器上都占32位,這就保證了Java的平臺無關性。
6) 嚴格控制數據類型轉換
一種數據類型的數據轉換成另外一種數據類型的數據時,常常會出現數據精度丟失的問題,在C、C++ 中,通過指針進行任意的數據類型轉換極不安全,而在Java中,運行時系統對對象的處理要進行類型相容性檢查,以防止不安全的轉換。
7) 庫文件
編程語言中豐富的庫文件能快速地開發出各種應用軟件。C、C++ 中用頭文件來聲明類的原型以及全局變量、庫函數等,在大的系統中,維護這些頭文件是很困難的。而Java不支持頭文件,類成員的類型和訪問權限都封裝在一個類中,運行時系統對訪問進行控制,防止對私有成員的操作。同時,Java中用import語句來與其他類進行通信,以便使用它們的方法。
8) 類與結構體和聯合體
安全是一個永恒的話題。C、C++ 中的結構體和聯合體中的所有成員均為公有,這就帶來了安全性問題。Java中不包含結構體和聯合體,所有的內容都封裝在類中。其實Java與C、C++ 編程語言還有很多的差別如:速度、內部類、方法嵌入等,但總的來說Java提取了很多其他編程語言的優點,使它更適合于大眾程序員的需求。
2. Java與C# 對比
Java語言是開放式的世界語言,基本源代碼都公開,而C# 作為Microsoft的一門主打語言也不甘示弱。一個開源,一個收費,它們兩者基本上都對C、C++ 深澀的語法和語義進行了改進。在語法方面,兩者都摒棄了const修飾、宏替換等;在繼承方面,兩者都采用更易于理解的單繼承和多接口實現方案;在源代碼組織方面,兩者都提出了聲明與實現于一體的邏輯封裝。
Java與C# 的不同點主要體現在:C# 在Microsoft的支撐下提供了強大的Visual Studio開發平臺,可以極好地提高C# 程序的開發效率。而且C#更善于利用Windows平臺。Java的設計宗旨是獨立于任何平臺,因此自然不會提供太多的Windows特性。但這也正體現了Java語言的跨平臺優勢。一般企業級應用,無法確定這個應用是在怎樣的平臺上運行。因而企業級開發一般選擇Java作為開發語言。