【详解】Java语言的特点以及Java语言与C/C++的比较
文章目錄
- 一、Java語言的特點
- 1.跨平臺性/可移植性
- 2.面向對象
- 3.簡單性
- 4.分布性
- 5.健壯性
- 6.安全性
- 7.解釋型
- 8.多線程
- 二、Java與C/C++的區別
- 1.指針
- 2.多重繼承
- 3.數據類型及類
- 4.自動內存管理
- 5.操作符重載
- 6.預處理能力
- 7.Java語言不支持全局變量和函數
- 8.字符串
- 9.goto語句
- 10.類型轉換
一、Java語言的特點
1.跨平臺性/可移植性
以C++為例,當運行一段C++代碼時,C++編譯器首先會依據代碼所在平臺來針對CPU芯片進行編譯、連接,產生機器指令,然后在相應平臺上進行運行。因此,同一段C++代碼針對不同的平臺編譯結果可能不同,無法保證C++編譯器產生的可執行文件在所有平臺上都能被正確運行,當換平臺運行時可能需要修改源程序,并針對新的平臺重新進行編譯。
相反,Java源代碼不針對具體的平臺進行編譯,而是會產生一種字節碼中間文件(class文件),這種文件是平臺無關且體系結構獨立的。
因此在任何一個具有java編譯器的操作系統下,作為編譯結果的字節碼文件是相同的,都可以在任何具有JVM(Java虛擬機)的計算機上運行。JVM能夠識別這些字節碼文件,并且將字節碼文件進行轉換,使之能夠在不同平臺上運行。JVM能夠解釋并執行這種平臺無關的字節碼文件,實現跨平臺運行。JVM是用C++編寫的一個虛擬計算機;JVM屏蔽了操作系統之間的差異。
優點:Java代碼一次編寫到處運行,平臺無關
缺點:執行相對麻煩,依賴虛擬機,必須在有JVM的平臺上才能運行java程序
2.面向對象
Java語言吸收了C++面向對象的概念,將數據封裝于類中,是完全面向對象的。除了很少的基本數據類型,所有的數據都作為對象呈現,所有的GUI構建都是對象。與C++不同,Java語言中的所有函數都必須和對象相關(這些函數被稱為類方法),即使是用于啟動應用程序的主函數也不再是孤立的,必須捆綁在類中。Java中提供了封裝、繼承、多態的面向對象機制。
3.簡單性
Java語言自身小巧玲瓏,對硬件要求很低,只需要理解一些基本的概念,就可以編寫適合于不同情況的應用程序。在Java中略去了運算符重載、多重繼承等概念,并實現了垃圾自動回收機制,大大簡化了程序設計者的內存管理工作。同時,Java語言底層是C++,相比C++來說,Java語言不需要操作指針,簡化了程序員的編程工作
4.分布性
Java語言的分布性分為數據分布和操作分布。數據分布是指將數據分別放在多個不同的主機上,操作分布是在多個不同的主機上布置相關工作,這些主機是網絡中的不同成員
Java語言是面向網絡的語言,提供豐富的類庫來處理TCP/IP協議,用戶可以通過URL地址在網上很方便地訪問其他對象
5.健壯性
健壯性是指在程序編譯和運行過程中會檢查可能會出現的問題,避免錯誤的發生。在Java中有完善的異常處理機制,程序員可以將可能會產生運行異常的代碼放在異常處理結構中,簡化了異常處理過程,增強了程序的健壯性;Java中還有垃圾自動回收機制(GC機制),JVM負責調度GC機制,程序員不需要干涉,避免了內容丟失等動態內存分配導致的問題;Java不支持指針,避免了對內存的非法訪問,C/C++指針操作可能會導致內存泄漏;Java中還去掉了C語言中可能產生錯誤的語法,減少了隱含錯誤的發生,例如:在C/C++中,“if (a=3)”這樣的判斷語句是合法的,而在Java中,必須是“if (a==3)”這樣的判斷語句,避免了隱含錯誤的發生。
6.安全性
優點:不容易導致內存泄露,更加安全
缺點:效率問題,程序員駕馭感比較差
7.解釋型
C/C++都是直接對CPU芯片進行編譯,生成機器代碼,所以代碼的運行和特定的CPU有關。而Java語言不針對CPU直接編譯,而是將程序編譯成接近機器碼的“中間字節碼”文件,由JVM解釋和執行
8.多線程
多線程允許同一個程序中有兩個以上的執行線路,即同時做兩件以上的事情。Java語言支持多線程,允許多個線程存于同一塊內存中,共享內存資源。CPU輪流為每個線程分配時間片,每個線程在非配的時間片內處理任務。由于用戶感覺不到時間片的輪流分配,從而認為幾個任務是同時執行的,使得軟件更加具有交互性和實時響應能力。另外,Java語言中提供了線程中的同步機制,保證了對共享數據的正確操作
二、Java與C/C++的區別
1.指針
Java中不支持指針,且增添了垃圾自動回收機制,從而有效防止了C++語言中指針操作失誤(內存泄漏)。但Java中不是完全沒有指針,虛擬機內部還是使用了指針,只是程序員不能使用而已,增加了Java程序的安全性
2.多重繼承
Java語言不支持多重繼承,但允許一個類繼承多個接口(extends+implement),也能實現多重繼承的功能,也避免了C++中多重繼承實現方式帶來的諸多不便;而C++支持多重繼承,允許一個類繼承多個父類。但其使用復雜,容易引起麻煩,編程不易實現
3.數據類型及類
Java語言是完全面向對象的語言,所有的函數和變量必須是類的一部分,除了基本數據類型外,其余的都作為類對象。而C++允許將函數和變量定義為全局的。此外,Java中取消了C/C++中的結構和聯合,消除了不必要的麻煩
4.自動內存管理
Java程序中所有的對象都是用new操作符建立在內存堆棧上,自動進行無用內存回收操作,不需要程序員進行刪除。而C++中必須由程序員釋放內存資源,增加了程序設計者的負擔,且增加了程序的風險。Java當一個對象不再被用到時,垃圾回收器將它添加上標簽以示刪除。Java中的垃圾不是立即刪除,而是等到一個限額時再統一進行刪除
5.操作符重載
為了保證語言盡可能簡單,Java不支持操作符重載。操作符重載被認為是C++的突出特點,Java語言中雖然可以通過類方法重載來實現類似功能,但仍然不如操作符重載方便
6.預處理能力
Java語言不支持預處理功能。C/C++在編譯過程中都有一個預編譯階段,為開發人員提供了方便,但增加了編譯的復雜性。Java虛擬機沒有預處理器,但它提供的引入語句(import)與C++預處理器的功能類似
7.Java語言不支持全局變量和函數
作為一個比C++更純的面向對象語言,Java中的所有變量和函數都應該包括在類中
8.字符串
Java語言中字符串都是用類對象(String和StringBuffer)來實現的,這些類是Java語言的核心,使得Java語言的字符串處理比C++更方便
9.goto語句
引用goto語句容易引起程序的結構混亂,因此結構化編程不建議采用goto語句。Java雖然指定goto作為關鍵字,但不支持goto語句,使程序更加簡潔易讀
10.類型轉換
在C/C++中有時會出現數據類型的隱含轉換,這就涉及了自動強制類型轉換問題。例如,在C++中可將一浮點值賦予整型變量,并去掉其尾數。Java不支持C++中的自動強制類型轉換,如果需要,必須由程序顯式進行強制類型轉換
總結
以上是生活随笔為你收集整理的【详解】Java语言的特点以及Java语言与C/C++的比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 代码详细解析简单常用DOS命令 jav
- 下一篇: 200827C阶段一_C++基础