java與C#區別整理

1、屬性:Java中定義和訪問屬性均要用get和set方法,C#則以特殊形式:

public int TaskId
        {
            get { return _taskId; }
            set { _taskId = value; }
        }


2、java中沒有virtual關鍵字,java中基類的所有方法都是virtual的。java中也無法使用override來修飾方法,java中子類所有方法都是override的。


3、java只有繼承,沒有擴展。


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


5、C#中的base == java中的super。


6、java中沒有結構,C#的結構(Struct)與類很相似,而結構是一種值類型,它存儲在棧中或者是嵌入式的,結構可以實現接口,可以象類一樣擁有成員,結構不支持繼承。 


7、C#中有析構器(destructor,~structor),java中沒有,但java有finalize函數,finalize函數極不推薦使用。


8、java中沒有using關鍵字,C#中有,它允許爲名稱空間或者名稱空間中的類指定別名:using TheConsole = System.Console,
using也可以用於釋放資源,當using代碼塊執行結束後會調用disposal方法。


9、傳值方式:
   在Java中簡單數據類型的值傳參時,都以傳值方式。
   在c#中如果加ref則會以引用的方式傳值(方法內部改變該參數,則外部變量一起跟着變),加out與ref基本相同,但out不要求參數一定要初始化.


10、C#的屬性聲明方式與java不同,java遵循POJO提供getXxx、setXxx,C#需要使用特殊寫法:public String Name{ get;set;}


11、C#中有索引器,而java中沒有。


12、C#中可以使用委託delegate,可以使用lambda表達式獲得一個方法(C#可以此實現代理模式,觀察者模式,自動事務處理等)。java中沒有delegate,但是有反射和代理,可以實現delegate。


13、C#使用yield實現迭代器,java中沒有yield關鍵字。


14、java中沒有LinQ這樣查詢功能,爲集合進行排序查找等操作。


15、C#中可以重載操作符,java中不可以。


16、C#中,不用任何範圍修飾符時,默認的是protect,因而不能在類外被訪問。java是package級別可以訪問


17、因爲Java規定,在一個文件中只能有一個public類,而且這個類的名稱必須與文件名一模一樣,這是一個區別


18、C#預定義的簡單數據類型比Java多。例如,C#有unit,即無符號整數。


19、對於常量,C#沒有Java中的static final修飾符。在C#中,常量可以用const關鍵詞聲明C#的設計者還增加了readonly關鍵詞,readonly域只能通過初始化器或類的構造函數設置


20、在Java中,switch語句只能處理整數。但C#中的switch語句不同,它還能夠處理字符變量。


21、goto關鍵詞: 
Java不用goto關鍵詞。在C#中,goto允許你轉到指定的標籤。不過,C#以特別謹慎的態度對待goto,比如它不允許goto轉入到語句塊的內部。在Java中,你可以用帶標籤的語句加上break或continue取代C#中的goto。


22、int[] x = { 0, 1, 2, 3 };
int x[] = { 0, 1, 2, 3 }; 
但在C#中,只有第一行代碼合法,[]不能放到變量名字之後。


23、在Java中,命名空間即是包,包的名字同時也是實際存在的實體,它決定了放置.Java文件的目錄結構。在C#中,物理的包和邏輯的名稱之間是完全分離的。
.NET中包的實體稱爲程序集(Assembly)。每一個程序集包含一個manifest結構。manifest列舉程序集所包含的文件,控制哪些類型和資源被顯露到程序集之外,並把對這些類型和資源的引用映射到包含這些類型與資源的文件。程序集是自包含的,一個程序集可以放置到單一的文件之內,也可以分割成多個文件。.NET的這種封裝機制解決了DLL文件所面臨的問題,即臭名昭著的DLL Hell問題。


24、在Java中,Java.lang包是默認的包,C#中不存在默認的包。


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


public:成員可以從任何代碼訪問。 
protected:成員只能從派生類訪問。 
internal:成員只能從同一程序集的內部訪問。 
protected internal:成員只能從同一程序集內的派生類訪問。 
private:成員只能在當前類的內部訪問。


26、在Java中,接口方法聲明可以帶有public修飾符,但在C#中,顯式爲接口的方法指定public修飾符是非法的。


37、C#中的is操作符與Java中的instanceof操作符一樣,兩者都可以用來測試某個對象的實例是否屬於特定的類型。
在Java中沒有與C#中的as操作符等價的操作符。as操作符與is操作符非常相似,但它更富有“進取心”:如果類型正確的話,as操作符會嘗試把被測試的對象引用轉換成目標類型;否則,它把變量引用設置成null。


38、C#仍舊保留了C++的內存手工管理方法,它適合在速度極端重要的場合使用,而在Java中這是不允許的。


39、在C#中,所有的異常都從一個名爲Exception的類派生,java分爲兩種:RuntimeException、Exception,這兩個都繼承於ThrowAble。


40、c#保留了指針。unsafe


41、C#線程同步使用 lock 關鍵字,java中使用synchronized 


42、C#啓動線程
Thread t = new Thread(new ThreadStart(FunctionName));
或者Thread t = new Thread(FunctionName);   這就是最基本的創建線程方法。但是ThreadStart是無參數的委託類型,


java中啓動線程 new Thread(new Runable()).start();


參考:

發佈了17 篇原創文章 · 獲贊 3 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章