| 特性 | Java | C# | 遷移要點 |
|---|---|---|---|
| 繼承關鍵字 | `extends` | `:` | 類繼承類、類實現接口均用 `extends`/`implements` |
| 接口實現 | `implements` | `:` | 同上 |
| 文件名限制 | public 類名 = 文件名 | 無強制 | 一個文件僅一個 public 類 |
| 靜態成員調用 | 類名/實例均可 | 僅類名 | Java 更靈活但易混淆 |
| 方法重寫 | 直接重寫 | `override` 關鍵字 | Java 無編譯期檢查,建議加 `@Override` |
| static 初始化塊 | 有,類加載時執行一次 | 靜態構造函數 `static Class()` | Java 獨有,用於複雜靜態初始化 |
| final vs sealed | `final` 修飾類/方法/變量 | `sealed` 類、`readonly` 字段 | 語義相似,關鍵字不同 |
| 字符串比較 | `equals()` 比值,`==` 比引用 | `==` 重載比值 | **Java 必須用 equals()** |
| 調用父構造器 | `super()` 在構造器首行 | 構造器後 `: base()` | 語法位置不同 |
ArrayList:動態數組,隨機訪問快,增刪慢LinkedList:雙向鏈表,增刪快,**獨有 `addFirst()`/`addLast()`**Vector:線程安全(同步方法),性能較差Stack:繼承 Vector,LIFO,**push 即插入索引 0**HashMap:非線程安全,允許 null key/value,高性能Hashtable:線程安全,不允許 null,舊 APIkeySet().iterator() → `hasNext()`/`next()` → `get(key)`| 需求 | 推薦 |
|---|---|
| 線程安全 | Vector / Hashtable / Collections.synchronizedXxx / ConcurrentHashMap |
| 高性能單線程 | ArrayList / LinkedList / HashMap |
| 鍵值對 | HashMap / Hashtable |
| 大數據量+線程安全 | Vector(或分段鎖 ConcurrentHashMap) |
FileOutputStream fos = new FileOutputStream(file);
fos.write(bytes); fos.close();
FileInputStream fis = new FileInputStream(file);
byte[] buf = new byte[4096];
int len;
while ((len = fis.read(buf)) != -1) { process(buf, len); }
FileWriter fw = new FileWriter(file);
fw.write(str); fw.close();
FileReader fr = new FileReader(file);
char[] buf = new char[1024];
int len;
while ((len = fr.read(buf)) != -1) { process(buf, len); }
BufferedReader br = new BufferedReader(new FileReader(file));
BufferedWriter bw = new BufferedWriter(new FileWriter(dest));
String line;
while ((line = br.readLine()) != null) {
bw.write(line); bw.newLine();
}
Thread:`new MyThread().start()`Runnable:`new Thread(new MyRunnable()).start()`(推薦,解耦任務與執行)synchronized(obj) { ... }:互斥鎖,同步塊/方法Thread.sleep(ms):不釋放鎖,指定時間/中斷喚醒wait()/notify():釋放鎖,需在同步塊中,配合條件變量Statement st = con.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM table");
PreparedStatement ps = con.prepareStatement("SELECT * FROM table WHERE name=?");
ps.setString(1, "value");
ResultSet rs = ps.executeQuery();
ServerSocket ss = new ServerSocket(9999);
Socket socket = ss.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
Socket socket = new Socket("127.0.0.1", 9999);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
public void exec(String sql, String... params) {
// params 當作 String[] 使用
for (int i=0; i
C# 對應 `params` 關鍵字。
Java 與 C# 同屬靜態強類型 OOP 語言,核心概念高度重疊。**語法細節差異**是遷移初期主要阻力,重點掌握:集合遍歷差異、字符串比較、靜態塊、異常檢查、泛型擦除。建議配合 IDE 實戰練習,一周內可實現無縫切換。