JAVA與C#的語法區別

<過去10年的程序員生涯>看了這篇文章,真覺得是該學點什麼了,我雖然沒有開發10年但算了算也有5年了。

²  java中定義和訪問均要用get和set方法,可以不成對出現。 c#中是真正的屬性,定義時get和set必須同時出現,訪問時用.號即可。不用get,set

²  因爲JAVA規定,在一個文件中只能有一個public類,而且這個類的名稱必須與文件名一模一樣。但在C#中沒有這種限制,一個文件可以有多個公有類,一個類還可以分散放在多個文件中。Java的類方法一般用小寫字母開頭,而C#的類方法一般用大寫字母開頭。

²  在C#中,它是以Main方法來定位入口的.如果一個程序中沒有一個名爲Main的方法,就會出"找不到入口的錯誤".不要把Main寫成main喲

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

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

²  公用類的入口點:c#是可以對Main進行重載(java中是main),允許有int返回值和空參數的Main

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

²  C#沒有>>>移位操作符

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

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

²  與Java不同的是,C#允許爲名稱空間或者名稱空間中的類指定別名: using TheConsole =System.Console;

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

²  在Java中,java.lang包是默認的包,C#中不存在默認的包

²  C#中的訪問修飾符與Java中的基本對應,但多出了一個internal。簡而言之,C#有5種類型的可訪問性,如下所示:internal:成員只能從同一程序集的內部訪問。

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

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

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

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

²  在C#中,所有的異常都從一個名爲Exception的類派生

²  枚舉器即enum類型(java無),把它作爲一個變量值的類型使用,從而把變量可能的取值範圍限制爲枚舉器中出現的值。

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

²  c#保留了指針。unsafe

²  代理(delegate)可以看作C++或者其他語言中的函數指針 代理用來封裝可調用方法。你可以在類裏面編寫方法並在該方法上創建代理,此後這個代理就可以被傳遞到第二個方法。這樣,第二個方法就可以調用第一個方法。代理是從公共基類System.Delegate派生的引用類型。定義和使用代理包括三個步驟:聲明,創建實例,調用。代理用delegate聲明語法聲明。

Ø  C#爲了把實現相似功能的類組織在一起,引入了命名空間的概念(namespace)Java中與此對應的東西叫做包(package)

Ø  C#中類的繼承用通過冒號:實現,在Java中用extends,C#中實現接口通過冒號:實現,在Java中用implements

public class MyClass : ParantClass,Interface1,Interface2 {}

public class MyClass extends ParantClassimplements Interface1,Interface2 {}

Ø  C#中有部分類(partial局部類型)的概念,Java中沒有

Ø  C#中有virtual和override修飾虛方法和重寫方法,Java中沒有,Java中默認父類中的方法都是virtual的

Ø  Java中有static{},synchroized{}代碼塊的概念,C#中沒有

Ø  Java中有標籤(如labelA:)的概念,C#中沒有

Ø  C#中子類調用父類的方法用base.method(),Java中用super.method()

Ø  C#中用is來判斷一個實例是否是某一個類的,Java中用instanceof

Ø  C#中用foreach(inti in array)來對數組中每一個元素的遍歷,Java中用for(inti : array)

Ø  重寫
c#:
public override stringToString ( );

JAVA:

@Override

public String toString()



Java常用包:

java.lang : 這個基礎的基礎

java.util : 工具庫

java.net : 網絡通信用協議包

java.io:  輸入輸出管道

java.awt : 基本圖型工具包

javax.swing : 高級圖型工具包

java.math : 數學括展包

java.sql : 用來訪問DB的包

.net常用命名空間(這裏沒用C#是因爲.net平臺的幾種語言都是共用的一個framework):

System.Collections:集合相關,比如列表,隊列,數組,哈希表等

System.IO : 數據流

System.Text : 包含了一些表示字符編碼的類型及字符串的操作和格式化

System.Reflection:反射相關

System.Threading:多線程

System.Drawing :繪圖

System.Data :數據訪問

System.Net :網絡通信

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