因工作安排,后期需要維護一個java項目。所以稍微熟悉下java,開此篇記錄下java與c#的區別點,方便增強自己學習效果。肯定是不全的,可能是有錯的,歡迎批評指正。
一、關鍵字
描述 | C# | Java | 備注 |
引用其他類庫 | using | import | |
命名空間 | namespace | package | 聲明一組相關對象的作用域。 |
定義常量 | const | final | |
訪問控制修飾符 | internal | default | java默認為default,c#默認為private |
表示父類 | base | super | 用於從派生類中訪問父類的成員。 |
繼承類 | : | extend | |
繼承接口 | : | implements | |
不允許繼承 | sealed | final | 防止類派生;防止方法和屬性在派生類中被重寫。 |
類型判斷 | is | instanceof | 評估對象與給定類型是否兼容。 |
循環遍歷 | foreach() | for(type element: array) | 例:for(int x : numbers ){} |
鎖 | lock | synchronized | |
可變數量參數 | params T | T... | 指定采用可變數目的參數的方法參數。 |
外部實現的方法 | extern | native | 聲明外部實現的方法。 |
布爾值 | bool | boolean |
二、代碼結構
- java中,如果一個類定義在某個包中,那么package語句應該在源文件的首行。package中內容不用花括號包起來,范圍適用於全文見。
- java中,如果源文件包含import語句,那么應該放在package語句和類定義之間。如果沒有package語句,那么import語句應該在源文件中最前面。
- java中,一個源文件中只能有一個public類。
- java中,一個源文件可以有多個非public類。
- java中,源文件的名稱應該和public類的類名保持一致。
- java中,調用父類構造函數,需要在子類構造函數中顯示調用super(params);C#中在子類構造函數聲明后加上:base(param)來實現。
三、編碼風格
- java中,方法名使用帕斯卡命名法,首字母小寫。
- java中,左花括號不換行。
四、其他
- 在 Java 中,int類型前綴0表示8進制;在C#中忽略0,前綴0x表示8進制。
- 在 Java 中,標識符中允許有美元符($),且允許作為首字符;c#中是@字符。(都是字母數字下划線加前文特殊符號)
- 在 Java 中,重寫父類方法不需父類方法標示為virtual。沒有覆蓋概念。
- Java 不支持隱式類型的局部變量(C# 支持
var
關鍵字)。
- 在 Java 中,可以僅按值傳遞參數,而在 C# 中,你可以按引用以及值進行傳遞。 (C# 提供
ref
和out
關鍵字,用於按引用傳遞參數;Java 中無此類等效項)。
- Java 不支持預處理器指令,如
#define
。
- Java 不支持無符號整數類型,而 C# 提供無符號整數類型,如
ulong
、uint
、ushort
和byte
。
- Java 不支持運算符重載;在 C# 中,可以重載運算符和轉換。
- 在 Java
switch
語句中,代碼可以貫穿到下一個 switch 部分,但在 C# 中,每個switch
部分的結尾必須終止 swith(每個部分的結尾必須以break
語句結束)。
- 在 Java 中,指定由帶
throws
關鍵字的方法引發的異常,但 C# 沒有檢查異常的概念 –throws
關鍵字在 C# 中不受支持。
- Java 不支持語言集成查詢 (LINQ)。