C# ,java語法比較

 

C# ,java語法比較

1. 源文件方面。C#可以在一個.cs 文件中。出現多個name sapce(命名空間,有些類似於pacakage),並定義多個類。C#包含有預處理指令。

2. 數據類型方面。

a) C#定義了struct(結構),不能是抽象的,也不能被繼承,是值類型的。

b) C#沒有基本類型的概念,全部是面向對象的類型,int是Int32的簡寫。

c) 在Java中const是保留字,final與C#中的const意思相同,C#中還有readonly允許運行時賦初值。

d) 字符串比較,C#中可以用=比較值,與Java一樣用StringBuffer來減少內存開銷。

3. 運算符方面。C#增加了Checked和Unchecked以繞過編譯錯誤。比如“把一個long付給int32 ,如果高32爲零 則不會出錯,否則會有溢出錯誤,unchekced就是告訴編譯器不要去管溢出,盡你可能轉化”

4. 分支語句方面。在Java中goto是保留字。C#中switch中的case不會順序執行,末尾必須有break或者goto關鍵字。

5. 循環語句好像沒有什麼不同的。

6. 訪問修飾符方面。在範圍放main,C#增加了internal和protected internal,前者表示只能從當前程序集內可見,即可以在編譯時可Assembly的DLL或EXE,類似於JAR;後者表示對當前程序集或者從此包含類繼承的類可見。Sealed相當於Java中的final關鍵字。

7. 方法方面。與Java相同,只有基本類型通過值傳遞,其他都是傳遞引用。不過C#也可以以引用的方式傳遞基本類型,利用ref關鍵字。而out關鍵字有些類似於Oracle存儲過程,與ref的區別在於:方法忽略out參數初始值,方法必須爲out參數賦值。

8. 屬性方面。Getter和Setter的寫法不太一樣。

9. 繼承方面。C#增加了base關鍵字以指向父類。C#中父類方法中具有virtual關鍵字的纔可以被子類重寫,重寫時還需要聲明override。與抽象類相同,abstract關鍵字也必須被override重寫。C#中的接口不能聲明常量,接口的屬性只是表示Getter或Setter。

10. 事件。Java中沒有(Java通過實現自定義偵聽器類執行事件)。C#定義了類似於函數指針的委託來實現事件。

11. 運算符重載。Java中無。運算符重載必須爲類的靜態方法,重載==,其他判等操作也必許重載。

12. 異常方面。與Java非常相似,只是沒有throws關鍵字,無須截獲異常(當然要在程序主入口去截)。

13. C#增加了索引器,可以象訪問數組一樣訪問類或結構。個人感覺就是少些幾個字而已,還造成一定的困擾。

14. C#的Attribute要比Java的Annotation強很多。不過加上AOP後,這種動態功能Java也不錯了。

15. 在C#中也可以直接使用指針,開闢或者回收內存,只是要使用兩個關鍵字unsafe和fixed。 

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