Java與C/C++的區別

 

JavaCC++的區別

        首先應該清楚,Java是由C++發展而來的,它保留了c++的大部分內容,類似於c++

但句法更清晰,規模更小,更易學。它是在對多種程序設計語言進行了深入細緻研究的

基礎上,據棄了其他語言的不足之處,從根本上解決了c++的固有缺陷,而產生的一種

新的完全面向對象的語言。

    Javac++的相似之處多於不同之處,但兩種語言問幾處主要的不同使得Java更容易

學習,並且編程環境更爲簡單。

     因篇幅所限,這裏不能完全列出不同之處,僅列出比較顯著的區別:

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

    1指針

    Java無指針,並且增添了自動的內存管理功能,從而有效地防

止了cc++語言中指針操作失誤,如指針懸空所造成的系統崩潰。

w操作返回一對象的引用,類似於c++中的引用;在c++中,

new返回一個對象的指針。在Java中無指針,不會遇到下面這樣的

語句:

  Mywork—>Mywork();

  沒有指針的程序無法訪問不屬於它的內存,消除了在c++

中—些常見的錯誤,這有利於Java程序的安全。

    2多重繼承

    c++支持多重繼承,這是c++的一個特徵,它允許多父類派

生一個類。儘管多重繼承功能很強,但使用複雜,而且會引起許多麻

煩,編譯程序實現它也很不容易。Java不支持多重繼承,但允許一個

類繼承多個接口(界面),實現了c++多重繼承的功能,又避免了c++

許多缺陷。

  3數據類型及類

    JavafJ,使用了個能和整數湖蝴的布爾類型(bo01ean),它儀有二個值:truefalse

Java是完全面向對象的語言,所有函數和變量部必須是類的一部分。除了基本數據類型(

控型初浮點型)之外,其餘的都作爲類對象,包括中和數組。對象將數據(Propers)和方法

(methd)結合起來,把它們封裝在類中,這樣每個對象都可實現自己的特點和行爲。而c++

允許將函數和變量定義爲全局的。

    此外,Java中取消了cc++中的結構和聯合,使編譯程序更簡捷。

    4自動內存管理

    Java程序中所有的對象都是用new操作符建立在堆棧上,這個操作符類似於c++

new操作符。下面的語句由一個類Readkcy建立了一個對象,然後調用該對象的work

法:

    配『9dLey myrk

    m?worknew Readkey()

    m!workwork()g

    這個簡單的代碼片段突出了Ja調和c十十的一些主要差別,在c十十中,語句Read

keyywork在堆棧結構上建立了一個Readkcy的實例。在JaM中不支持基於堆棧的對象,

所以這條語句建立了一個叫”ywork的變量,該變量中存有對象Readk7的引用。

    Javs自動進行無用內存回收操作,不需要程序員進行刪除。而c十十中必須由程序貝釋

放內存資源,增加了程序設計者的負扔。Java中當一個對象不被再用到時,無用內存回收器

將給它加上標籤以示刪除。無用內存回收器在後臺運行,利用空閒時間工作。

    5操作符重載

    Java不支持操作符重載。操作符重載被認爲是c十十的突出特徵,在Java中雖然類大

體上pJ以實現這樣的功能,但操作符重載的方便性仍然丟失了不少。Java語言不支持操作

符重載是爲了保持Java語言儘可能簡單。

  6預處理功能

  Java允預處理器.因此不支持預處理功能。cc十十在編譯過程中都有一個預編澤階

段,即衆所周知的預處理器。預處理器爲開發人員提供了方便,但增加丁編譯的複雜性。JaM

沒有預處理器,但它提供的引入語句(iPort)c十十預處理器的功能類似。

  7.  Java不支持缺省函數參數,而c十十支持。

    c中,代碼組織在函數中,函數可以訪問程序的全局變量。c十十增加了類,提供了類

算法,該算法是與類相連的函數,c十十類方法與Java類方法十分相似,然而,由於c十十仍

然支持c,所以不能阻止c十十開發人員使用函數,結果函數和方法混合使用使得程序比較

混亂。

    Java沒有函數,作爲一個比c十十更純的面向對象的語言,Java強迫開發人員把所有

例行程序包括在類中,事實上,用方法實現例行程序可激勵開發人員更好地組織編碼。

8    字符串

    cc十十不支持字符串變量,在cc十十程序中使用Null終止符代表字符串的結

束,在Java中字符串是用類對象(strinRstringBuffer)來實現的,這些類對象是Java語言

的核心,用類對象實現字符串有以下幾個優點:

    (1)在整個系統中建立字符串和訪問字符串元素的方法是一致的;

    (2)J3陽字符串類是作爲Java語言的一部分定義的,而不是作爲外加的延伸部分;

    (3)Java字符串執行運行時檢空,可幫助排除一些運行時發生的錯誤;

    (4)可對字符串用“十”進行連接操作。

    9goto語句

    “可怕”的goto語句是cc++的“遺物”,它是該語言技術上的合法部分,引用goto

語句引起了程序結構的混亂,不易理解,goto語句子要用於無條件轉移子程序和多結構分

支技術。

    鑑於以廣理由,Java不提供goto語句,它雖然指定goto作爲關鍵字,但不支持它的使

用,使程序簡潔易讀。

    l0類型轉換

    cc十十中有時出現數據類型的隱含轉換,這就涉及了自動強制類型轉換問題。例

如,在c十十中可將一浮點值賦予整型變量,並去掉其尾數。Java不支持c十十中的自動強

制類型轉換,如果需要,必須由程序顯式進行強制類型轉換。

    11.其它

    (1)breakcontinue後可加標號,以便跳出它標識的塊。如:

inTlJ

char a;

outing;

{for(i=:i5i十十)

for(j0;j3i j++)

{if((a(char)system.in.read())

break outing;

}}

 

    2)析構函數爲void finalize(){}

Java並不保證一定調用該函數,因此不能依賴該函數來保證所寫代碼的正常運行。

    (3)packa8e將有關聯的類組織在一起。例如,將自己編寫的類組織成packaBe

Packa8e mycla5se55

    (4)extaNs表示繼承(派生)關係,如;

class ne訂—clas5name extends oNclassname 47

    (5)虛函數用abra瓤修飾,而不用vual

    (6)提供丁一個創建完全虛類(界面)的方法;

    Public interface intlfacenamEt//abstract mGthods)

利用界面可以爲虛類定義協議,而不關心具體實施。一個類可以實現多個界面,同一個界面

也可以被多個類實現。實現界面使用imNemen賄,如:

    public classname implmenint6rfacena4)

    (7)異常。用於捕獲例外事件,增強系統容錯能力

try{//可能產生例外的代碼

}catch(exceptionType name){

//處理

其中exceptionType表示異常類型,如Arith

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章