轉給初學者:C#與java的語法區別[轉]

學完了JAVA以後,又轉到了學C#了,很多同學都會在這裏搞混,在C#裏面,經常用到JAVA的東西。在這裏,摘抄了部分JAVA和C#的語法區別,希望對大家有幫助! 

 

1.         Main方法(入口)

唯一的四種格式:

static void Main(string[] args)

static void Main()

static int Main(string[] args)

static int Main()

C#中一個項目只允許一個Main入口,且大寫!

Main方法返回值只爲void or int 前面沒有修飾符

2.         數據類型方面。

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

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

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

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

e)       JavaString是引用數據類型,C#string是基本數據類型。

3.         運算符方面

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

4.         分支語句方面

Javagoto是保留字。C#switch中的case不會順序執行,末尾必須有break或者goto關鍵字;java中不用。同時case中的數據類型不僅支持intchar,還支持其它數據類型。

5.         屬性:

java中定義和訪問均要用getset方法,可以不成對出現。

c#中是真正的屬性,定義時getset必須同時出現,訪問時用.號即可。不用get,set

6.         數組:

int[] x = { 0, 1, 2, 3 };

int x[] = { 0, 1, 2, 3 };

但在C#中,只有第一行代碼合法,[]不能放到變量名字之後。

7.         Java中,包的名字同時也是實際存在的實體,它決定了放置.java文件的目錄結構。在C#中,物理的包和邏輯的名稱之間是完全分離的

.NET中包的實體稱爲程序集(Assembly)。每一個程序集包含一個manifest結構。manifest列舉程序集所包含的文件,控制哪些類型和資源被顯露到程序集之外,並把對這些類型和資源的引用映射到包含這些類型與資源的文件。程序集是自包含的,一個程序集可以放置到單一的文件之內,也可以分割成多個文件。.NET的這種封裝機制解決了DLL文件所面臨的問題,即臭名昭著的DLL Hell問題。

8.         訪問修飾符方面:

C#中的訪問修飾符與Java中的基本對應,但多出了一個internal。簡而言之,C#5種類型的可訪問性,如下所示:

public:成員可以從任何代碼訪問。

protected:成員只能從派生類訪問。

internal:成員只能從同一程序集的內部訪問。

protected internal:成員只能從同一程序集內的派生類訪問。

private:成員只能在當前類的內部訪問。

9.         由於C#中不存在final關鍵詞,如果想要某個類不再被派生,你可以使用sealed關鍵詞

10.     繼承方面:

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

11.     運算符重載

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

12.    C#增加了索引器,可以象訪問數組一樣訪問類或結構。

13.     Java不同,C#中的接口不能包含域(Field)。

另外還要注意,在C#中,接口內的所有方法默認都是公用方法。在Java中,方法聲明可以帶有public修飾符(即使這並非必要),但在C#中,顯式爲接口的方法指定public修飾符是非法的。

14.     異常方面

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

15.     方法方面

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

16.     C#中也可以直接使用指針,開闢或者回收內存,只是要使用兩個關鍵字unsafefixed

17.     委託

委託(delegate)可以看作C++或者其他語言中的函數指針

委託用來封裝可調用方法。你可以在類裏面編寫方法並在該方法上創建委託,此後這個委託就可以被傳遞到第二個方法。這樣,第二個方法就可以調用第一個方法。

委託是從公共基類System.Delegate派生的引用類型。定義和使用委託包括三個步驟:聲明,創建實例,調用。委託用delegate聲明語法聲明。

 

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