最近在學習Java。之前一直是做的.NET開發,用的C#,正好最近有空閑時間,就看了看一直想了解的Java。
都說C#和Java很是接近,看了幾天的書,發現確實如此,基本該有的東西兩邊都有,內容都大同小異,不過C#到底是占了后出來的便宜,很多地方比Java封裝得更方便些。當然,這不是重點,簡單的幾天學習,雖說總體相近,但處處還是透露着不同,本着隨手做一做讀書筆記心態,大概收集了些簡單的,大抵是些語法上的不同。
因為本身就是初學者,有錯誤的地方還望指正,謝謝。
|
Java |
C# |
常量 |
使用 final 關鍵字 (const作為保留關鍵字,沒有使用) |
使用const 關鍵字 |
== |
在對比string的時候,只能對比兩個string是否引用同一位置,對比值是否相等的正確做法應該使用equals()方法 |
C#中的string重載了== 操作符,使其在內部調用了equals方法,所以可以直接使用於對比值 |
goto 語句 |
goto雖然作為保留字,但是並沒用使用。 |
可以使用,但是不推薦,通常goto語句被認為是一種拙劣的程序設計風格。 |
break |
除了中斷當前的控制流程外,Java還支持帶標簽的break。
label: { While(XXX) { While(XXXXX) { //退出循環語句塊 break label; } } } //會直接跳到這里
某種程度上說,這是goto語句的一種替代,但是只能跳出語句塊,不能跳入 |
只能跳出當前的break關鍵字所在的語句塊。 |
運算符重載 |
不支持 |
支持,但不是全部 |
在構造函數中調用其他構造函數 |
直接使用this(參數)調用 |
在當前構造函數的方法簽名后使用:this(參數)調用 |
包與命名空間 (兩者類似,但是又不相同) |
包,使用package 同時使用import導入類 |
命名空間,使用namespace 同時使用using導入類 |
繼承關鍵字 |
使用extends |
使用 : |
調用父類構造函數 |
使用super(參數)調用 |
在構造函數的方法簽名后使用: base(參數)調用 |
調用父類方法 |
使用super.方法名(參數) |
使用base.方法名(參數) |
方法的重寫 |
直接重寫,使用相同的方法簽名。方法默認動態綁定,即為所有方法創建方法表。
使用final關鍵字,可以使方法無法在子類中被重寫 |
使用同樣的方法簽名,同時使用override 關鍵字,且父類需要重寫的方法必須是虛方法virtual關鍵字,或者為抽象方法abstract關鍵字。且只為這些方法創建方法表。
沒有聲明為虛方法或者抽象方法的方法,無法在子類中被重寫
|
類型判斷 |
使用instanceof |
使用is |
訪問修飾符 |
除相同修飾符外,默認為對本包可見,沒有修飾符 |
除相同修飾符外,默認為對相同命名空間可見,可以顯式使用internal關鍵字 |
定義封閉類(不可被繼承) |
使用final關鍵字 |
使用sealed關鍵字 |
可變參數方法 |
方法名(類型…參數名){} |
方法名(params 類型[] 參數名){} |