當前位置:編程學習大全網 - 源碼下載 - c++和java有什麽區別?

c++和java有什麽區別?

Java程序中的每個變量要麽是基本數據類型(Boolean、char、byte、short、int、long、float、double ),要麽是對對象的引用。

C++有許多基本類型,包括結構、聯合、枚舉、數組和指針。C++指針可能指向也可能不指向壹個對象。

Java不枚舉和組合類型是因為Java覺得沒必要。去掉不必要的語言元素是Java對C/C++的壹個重大改變,所以壹般認為Java比C++更輕便、更簡潔。

Java使用Unicode字符集,C++通常使用ASCII字符集。但是ASCII是Unicode的子集,對於習慣了ASCII的程序員來說沒什麽區別。

Java中的布爾類型不能轉換成其他類型,反之亦然。C++最近推出了bool type,表示布爾類型,整數也作為邏輯判斷。

模板是壹種“泛型編程思想”,不同於“面向對象編程思想”。C++已經在很大程度上支持了這種新的編程方式,尤其是STL的出現。

Java目前不支持泛型編程,但據說Sun公司有計劃在Java中引入模板。

C++支持“運算符重載”,這是壹個非常重要的多態特性,也是數據抽象和泛型編程的利器。它允許直接對對象進行四種操作,就像基本數據類型壹樣。

Java不支持這種多態性機制,也是為了降低復雜度。

兩種語言都支持方法重載。

在C++中,為了允許運行時動態決定調用哪個函數,函數必須用虛擬。虛擬關鍵字被自動繼承以支持多態性。

所有沒有用virtual修飾的成員函數(包括static)都是靜態綁定的,也就是說調用哪個版本是在編譯時決定的。

在Java中,除了static、final和private之外,所有方法都被視為動態綁定。

C++裏有個“復制構造函數”的概念,三種情況下會自動調用。

用壹個對象初始化另壹個對象。

對象作為參數進行函數調用

對象作為函數的返回值

通常,當壹個對象需要被“深度復制”(錢能:C++編程教程)時,我們需要事先為它定義“復制構造函數”、“賦值運算符重載函數”、“析構函數”。否則,編譯器會以“按位復制”的形式自動生成相應的默認函數。如果類包含指針成員或引用成員,那麽這三個默認函數意味著錯誤。

Java沒有這樣的語法結構和語義邏輯。

C++支持內聯函數,可以避免函數的棧調用,提高運行效率。

Java沒有這樣的語義。

在C++中,構造函數的初始化列表是這樣使用的:首先按照繼承的順序調用基類的構造函數構造基類對象,然後按照聲明的順序調用成員對象的構造函數構造成員對象,最後初始化列表中出現的成員變量。

Java不使用初始化列表作為構造機制。

它們的結構順序基本相同:

靜態變量初始化

靜態初始化塊(Java)

調用基類的構造函數來構造基類對象。

實例變量的初始化

構造函數的其余部分

Java使用abstract關鍵字來修飾抽象方法或抽象類。

C++的等價語法是“純虛函數”和“抽象類”

兩者都使用抽象類作為繼承層次中的基類,提供通用概念,子類實現其抽象方法,抽象類不能直接實例化為對象。

Java裏有final關鍵字,修飾類,方法或者變量。

最終類不能被繼承

最終方法不能被子類覆蓋。

最後壹個變量是常數。

C++裏沒有這個關鍵字,常量可以用const或者#define來定義。

Const還可以修飾成員函數,即“常量成員函數”。當壹個常量成員函數修改成員數據或者調用壹個非常量成員函數時,編譯器會報告壹個錯誤。

我們應該將不修改成員數據的函數聲明為const。

Java和C++中靜態關鍵字的語法和語義基本相同。

靜態成員變量,也稱為類變量,由類的所有對象共享。

A::x (C++):必須在類外初始化。

A.x (Java):必須在類體中初始化。

靜態成員方法,也稱為類方法,訪問靜態變量。

A::f( ) (C++)

(Java)

兩者都具有內部類和局部類的語法和語義。

Java中沒有friend函數和friend類的概念,嚴格支持封裝,不允許外部方法訪問類的私有成員。

C++支持friend關鍵字,並允許外部方法訪問類的私有成員,因此它不是純粹的面向對象編程語言。

Java中的類或接口可以用public修飾,也可以不用;和C++類不能修改。

三種訪問權限的語義是相同的,但語法略有不同。

C++裏有繼承權修飾符,Java裏沒有。

A類:受保護的B,公共的C (C++)

類A擴展了B (Java)

Java有super關鍵字,指的是父類對象,通常用來調用父類的構造函數或者通用方法。

C++沒有super關鍵字。

都有這個,指的是當前對象。

Java有包的概念,可以組織類,方便打包部署,也有利於類的安全。C++沒有這個概念,壹個類可以被任何類訪問。

Java applet可以嵌入到HTML文檔中,然後由Web瀏覽器下載並執行。

Java API對網絡通信有特殊的支持。

C++沒有內置網絡功能。

C++程序員必須顯式實現動態內存管理,在析構函數中使用delete運算符或free()函數釋放對象和其他動態分配的數據空間,否則會造成“內存泄漏”。

在Java中,垃圾收集是自動的。當對象的最後壹個引用變量被釋放時,該對象就成為垃圾收集器的候選對象。

所以Java不支持析構函數。

finalize()方法主要用於釋放之前打開的非內存資源,比如文件句柄。

Java源代碼編譯成字節碼(。類文件),這是壹種只能被JVM識別的低級二進制代碼。與具體的處理器無關,需要安裝在OS上的JVM來解釋和執行,並轉換成相應平臺的機器碼。因此,Java是架構中立的,跨平臺的。

而C++直接編譯成底層平臺的二進制機器碼,由CPU執行,是平臺相關的。

所以解釋執行的時候,Java程序比較慢。

Java語言支持多線程,允許並發線程同步和互斥操作。

C++沒有這樣的內部機制。

  • 上一篇:“引擎”是什麽意思?
  • 下一篇:Github最全用教程文本詳解
  • copyright 2024編程學習大全網