Java和C#都是編程的語言,它們是兩個不一樣方向的兩種語言編程
相同點:c#
他們都是面向對象的語言,也就是說,它們都能實現面向對象的思想(封裝,繼承,多態)數組
區別:安全
1.c#中的命名空間是namespace相似於Java中的package(包),在Java中導入包用import而c#中用using。
2.c#和Java都是從main函數入口的,可是c#中的main函數的首字母必須大寫,它有四種寫法以下:
static void Main(string args[]){}
static int Main(string args[]){}
static void Main(){}
static void Main(){}
而Java中只有一種形式:static void main(String [] args){}
3.數據類型:Java跟c#基本都差很少,可是Java的String類型的首字母必須大寫,而c#中能夠小寫也能夠大寫,還有布爾型,Java中是boolean,c#中是bool。
4.變量的命名:Java中能夠用$符號,而c#中不可使用。
5.註釋:Java比c#少一種"///"的文檔註釋。
6.輸出:c#有三種方式輸出:Cosole.WriteLine(); Cosole.WriteLine(要輸出的值); Cosole.WriteLine("格式字符串",變量列表); 前兩種的用法與Java中的ystem.out.println()方法的用法相同,第三種方式是根據佔位符輸出的,比Java更方便了。
7.控制流語句:c#跟Java相似,還有c#中的switch若是case後面有內容必需要有break;Java能夠沒有break;
8.數組:兩種語言的聲明都是用new關鍵字的。均可以在建立數組的同時初始化如:int a[]={1,2,3,5,5};可是c#比Java多兩種初始化如:int a[]=new int[3]{1,2,3}; int a[]=new int[]{1,2,3};
9.方法中傳遞的參數:兩種語言都使用值傳遞與引用傳遞。
C#的引用傳遞的關鍵字是ref與out,ref側重於修改,out側重於輸出。而Java中都以傳值方式;
10.訪問修飾符:C#中的訪問修飾符與Java中的基本對應,但多出了一個internal。簡而言之,C#有5種類型的可訪問性,以下所示:
public:成員能夠從任何代碼訪問。 protected:成員只能從派生類訪問。
internal:成員只能從同一程序集的內部訪問。
protected:成員只能從同一程序集內的派生類訪問。
private:成員只能在當前類的內部訪問。
11.因爲C#中不存在final關鍵詞,若是想要某個類再也不被派生,你可使用sealed關鍵詞密封。
12.集合:兩種語言都有集合ArrayList,還有經過鍵訪問值的Java中是HashMap而c#中是HashTable。c#比Java多泛型集合List<T>與Dictionary<K,V>更容易了,無需拆箱裝箱了,更安全了。
13.繼承:Java中用關鍵字extends,c#只用":"就好了.調用父類的構造方法Java用super關鍵字,而c#用base關鍵字。
14.多態:抽象類和抽象方法兩種語言都用abstract關鍵字。Java中另一個類若是繼承了它,實現直接重寫此方法就能夠了;而c#必須加上關鍵字override實現。C#還比Java多一種虛方法來實現多態。
15.接口:都用關鍵字interface定義,Java實現用關鍵字implements;c#用":"實現。在C#中,接口內的全部方法默認都是公用方法。在Java中,方法聲明能夠帶有public修飾符(即便這並不是必要),但在C#中,顯式爲接口的方法指定public修飾符是非法的。
16.C#中的is操做符與Java中的instanceof操做符同樣,二者均可以用來測試某個對象的實例是否屬於特定的類型。在Java中沒有與C#中的as操做符等價的操做符。as操做符與is操做符很是類似,但它更富有"進取心":若是類型正確的話,as操做符會嘗試把被測試的對象引用轉換成目標類型;不然,它把變量引用設置成null。
17.結構(Struct)與類很類似,而結構是一種值類型,它存儲在棧中或者是嵌入式的,結構能夠實現接口,能夠象類同樣擁有成員,但結構不支持繼承。
18.c#保留了指針。Unsafe。(C#使用指針不安全,最後這條有待考證)ide