(轉自http://c.biancheng.net/view/2816.html)
本節簡單的給大家說一說 java和C的關系和發展歷程。
首先呢,大家知道,編程語言的發展,其實是經過了三個比較大的階段階段,那就是:匯編語言–> 面向過程語言 ->面向對象語言。
匯編語言由於其難度太大,需要記憶的語句命令過多,但是其對計算機底層的控制和操作能力還是很強大的,由於學習成本太大,效率較低,已經不作為現在計算機系的重點教程了。
C語言可以作為面向過程語言的一種代表,算是一種比較純正的面向過程語言了。而面向過程的語言也稱為結構化程序設計語言,是高級語言的一種。在面向過程程序設計中,問題被看作一系列需要完成的任務,函數則用於完成這些任務,解決問題的焦點集中於函數。所以說C語言的基本單位也是函數。
面向過程的概念最早由 E.W.Dijikstra 在 1965 年提出,它的主要觀點是采用自頂向下、逐步求精的程序設計方法,使用三種基本控制結構構造程序,即任何程序都可由順序、選擇(if-else、switch-case)、循環(for、while、do-while)三種基本控制結構構造。
面向過程語言的最大的優勢就是適合模塊化設計。一個程序可以分解為多個函數,通過函數調用過程,使得可以用一條函數調用語句實現函數所完成的復雜運算過程。
這種方法使得可以將一個復雜問題的解決過程分解為較為簡單的幾個子問題的解決過程:
- 首先通過編寫函數用語句描述解決每一個子問題的解決過程的步驟;
- 然后可以用一條函數凋用語句描述解決某個予問題的過程的步驟;
- 最后在一個主程序中用多條函數調用語句描述解決分解為多個子問題的復雜問題的解決過程的步驟。
但是當我們在開發新系統諸如此類的問題時,我們開始肯定不清楚這個系統完工后的架構是怎么樣的,所以說,利用模塊化設計的語言,就很難對開發出來的系統進行調整(或者工作量會很大)。在此類諸多問題的壓力下,面向對象語言便體現出了其獨一無二的優勢。

面向對象語言(OOP, Object-Oriented Programming)是一類以對象作為基本程序結構單位的程序設計語言。Java 便就是面向對象編程中的的一種代表性語言。
C語言 | 19 世紀 70 年代初問世,1978 年美國電話電報公司(AT&T)貝爾實驗室正式發布C語言。 |
C++ | 在C基礎上,1983 年貝爾實驗室推出了 C++。 |
Java | 由 Sun 公司於 1995 年 5 月推出。 |
其實最早,C++ 相對於C語言的基礎上就添加了面向對象和模塊的思想,這也可以理解成 C++ 中兩個加號的來歷。
然而,C++ 在面向對象上做的並不是太好,比如 C++ 支持多繼承,多繼承會引發不確定性(這個后面談到繼承大家就知道了)。
再如,C++ 還支持指針,指針直接對內存底層操作,雖然效率高,危險系數卻非常高。例如,一個簡單的病毒程序就可以靠指針完成:你通過一個程序的中給指針隨機賦值,能夠獲取到訪問不屬於本程序執行空間的其他空間的權限,那么這也就是一個計算機病毒。(當然,真正的病毒不可能那么簡單,但這是基本特性)。所以后來的 Java 在 C++ 的基礎上移除了指針,增加了引用,提高了安全性。
C++ 中,假如你寫同樣一個程序,在 Java 里面會報錯,而在 C++ 語言里面是不會報錯的。為什么?
因為 C/C++ 語言設計的思想是:你想怎么寫程序就怎么寫,只要你的這種寫法錯得不是很離譜,就認為你這么寫有特殊的含義,可以通過。但 Java 不行:只要你這么寫有歧義,或者說這樣寫不太好,那么它都會報錯。
比如 C++ 中你可以將一個浮點型數據賦給一個整型變量,編譯時只會警告,因為會丟失精度,但是在 Java 中這樣寫就會報錯,它在語法上就禁止你這樣寫。這就是不同的語言對同樣一個問題有不同的理解和處理方式。
由於 C++ 中大大小小的問題會導致不安全性,所以就在 C++ 的基礎上,取其精華,去其糟粕,便形成了早期的 Java 語言。直到現在,Java 又多了很多新的特性,比如說集合,反射,泛型,Lambda 表達式等等。
正因為 C -> C++ -> Java 的發展歷史,使得 Java 在一定程度上繼承了多數C語言的語法,但又有一定的改變。