C#與JAVA的相同之處


因爲C#與JAVA都是基於C++發展起來的,所以兩者之間具備不少類似之處,具體以下: 

一、C#和JAVA語言的編譯結果是獨立於計算機和編程語言的,可執行文件能夠在受管理的執行 

環境中執行; 

二、C#和JAVA語言都是採用了自動的垃圾回收機制; 

三、C#和JAVA語言都取消了指針操做; 

四、C#和JAVA語言都沒有頭文件; 

五、C#和JAVA語言都只支持單重繼承,要實現與多重繼承相似的功能,必須經過接口來實現; 

六、類都是從Object類派生而來,類的對象經過關鍵字new生成; 

七、C#和JAVA語言都支持線程; 

八、C#和JAVA語言都沒有全局變量和全局函數,全部的變量和函數都屬於某個類全部; 

九、C#和JAVA語言都支持對數組和字符串邊界的嚴格檢查,不會出現邊界溢出的狀況; 

十、C#和JAVA語言都使用「.」操做符,再也不使用「->」和「::」操做符; 

十一、C#和JAVA語言都將null和bool做爲關鍵字; 

十二、C#和JAVA語言中全部的值都必須先初始化後才能使用; 

1三、C#和JAVA語言中的if語句都不容許採用整數做爲判斷條件; 

1四、C#和JAVA語言中的try語句塊均可之後接finally語句塊。 

C#與JAVA的不一樣之處: 

儘管C#和JAVA有不少相同之處,可是因爲兩者是兩家不一樣公司開發的高級程序設計語言,它們又相互獨立, 

自成體系,各自具備一些本身特有的特色,下面將C#與JAVA之間的不一樣之處以下: 

一、屬性 

對於那些常用快速開發工具,如Delphi或者Visual Basic的開發人員來講,屬性是一個很是熟悉的概念。 

通常來講,經過getXXX能夠讀取屬性的值,而經過setXXX能夠設置屬性的值。 

JAVA中比較常見的屬性操做語句: foo.setSize(foo.getSize()+1); label.getFont().setBold(true); 

c#中比較常見的屬性操做語句: foo.size++; label.font.bold=true; 

很明顯,上述的屬性設置方式較JAVA來講更爲簡潔,可主讀性也更強。這充分體現了C#簡單的特色。 

JAVA對於屬性的定義:public int getSize(){ return size; } public void setSize(int value){ size=value; } 

c#對於屬性的定義進行了簡化:public int Size{ get{ return size; } set{size=value; }} 

二、index 

C#提供index來給對象加上索引的功能,從而用與處理數組相似的方式來處理對象,JAVA語言則不支持index 

C#中定義index的典型方式以下: 

public Story this[int index] 



get{return stories[index]; } 

set{ 

if(value!=null){ 

stories[index]=value 





三、delegate :能夠認爲是一種類型安全、面向對象的函數指針。 

C#使有delegate能夠經過一個名字訪問不一樣的函數,它實現和JAVA中的interface相似的功能,可是它比interface更爲好用。 

四、event 

C#提供對event的直接支持,它經過delegate和event關鍵字實現對事件的處理。event關鍵字隱藏全部delegate方法,運算符「+=」和「-+」容許程序員自由加入或者刪除時間處理程序。 

五、enum:枚舉用於指定一系列的對象。 

C#經過以下語句來定義和使用枚舉: 

定義:public enum Direction{North,East,West,South}; 

使用:Direction wall=Direction.North; 

JAVA不直接支持枚舉,若是要實現和C#相相似的功能,必須先定義一個類 

public class Direction{ 

public final static int NORTH=1; 

public final static int EAST=2; 

public final static int WEST=3; 

public final static int SOUTH=4; } 

在定義了Direction類後,JAVA能夠經過引用類中的值來使用枚舉: 

int wall= Direction.NOTRH; 

六、foreach語句 

C#提供了標準的for循環,同時還提供了foreach語句(從VB中引入)來循環處理集合中的元素。 

JAVA遍歷集合中的全部元素的典型處理方式以下: 

while(!collection.isEmpty()) 



Object o=collection.get(); 

connection.next(); 

… 



C#遍歷集合中的全部元素:foreach(object o in collection){…} 

七、統一數據類型: 

大多數的高級程序設計語言都有基本數據類型,如整型、浮點類型等。同時,爲了更好地知足實際的須要,對不一樣的數據類型有不一樣的處理方式,顯然,若是可以對簡單數據類型的處理和對複雜數據類型的處理結合在一塊兒,並用一致的方式加以處理的話,無疑會大大提高應用程序設計的效率,加強程序設計的靈活性。 

JAVA語言在處理基本數據類型的時候也採起分別處理的策略,可是在基本數據類型的基礎上提供了一系列封裝這些基本數據類型的類,例如:整型(int)被類Integer所封裝,雙精度浮點(double)被類Double封裝。 

C#提供了一種和JAVA不一樣的方式來實現數據類型的統一。事實上,在c#中,即便是int這樣的簡單數據類型在C#內部也是經過一個結構體Int32來實現的,在C#中,能夠這樣認爲,int只是結構體Int32的一個別名。因爲C#中的結構體也繼承自類Object,這樣,Object類中定義的方法,各個結構體也擁有,因而,在C#中能夠經過以下的方式來操做整數:int I=5; System.Console.WriteLine(i.ToString()); 

八、操做符重載 

經過操做符重載能夠用一種比較天然的方式來操縱各類數據類型,從而大大提高程序的可讀性和靈活性。C#中的「==」操做符在Object類中進行了定義,在Object中定義的==操做符經過比較兩個值的引用來得到最後的結果。若是使有和集合相關的類,則必須在這樣的類中實現ICompar接口,這個接口中定義了一個方法CompareTo,該方法返回兩個對象的比較結果,在此基礎上,能夠進一步定義各個實現比較的操做符,如 

「>」、「<」、「>=」、「<=」等。事實上,數字類型(int、long等)能夠直接使用這些比較操做符,它們的內部都實現了ICompare接口。 

九、多態性 

虛似方法提供了多態性的技持。多態意味着派生類能夠定義一個和基類中同名的方法。儘管JAVA和C#都支持多態性,可是它們的具體實現方式仍是有必定的差異。 

在JAVA語言中,默認狀況下,基類的對象能夠直接調用派生類中的虛似方法,在C#語言中,基類要調用派生類中的虛似方法必須經過virtual關鍵字來實現。同時,在C#語言中,一個方法要重載基類中的同名方法,還必須經過關鍵字override來實現。在C#中實現多態的典型程序以下: 

Class B{ public virtual void foo{}} 

Class D:B{ public overried void foo(){}} 

以上只是簡單地比較了C#和JAVA之間的異同,事實上,這兩者之間的比較遠不止上面所介紹的內容,要學好這兩種語言,須要通過大量的實踐工做,在實踐中區分開兩種語言的共同點和不一樣點 
參考資料:http://www.enet.com.cn/article/2007/1010/A20071010859973.shtmlhtml

相關文章
相關標籤/搜索