首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 基礎語法筆記:從 C# 視角快速遷移指南

     編輯:Java 綜合教學

核心差異速查表

特性JavaC#遷移要點
繼承關鍵字`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()`語法位置不同

集合框架對比

List 系

  • ArrayList:動態數組,隨機訪問快,增刪慢
  • LinkedList:雙向鏈表,增刪快,**獨有 `addFirst()`/`addLast()`**
  • Vector:線程安全(同步方法),性能較差
  • Stack:繼承 Vector,LIFO,**push 即插入索引 0**

Map 系

  • HashMap:非線程安全,允許 null key/value,高性能
  • Hashtable:線程安全,不允許 null,舊 API
  • 遍歷模式:keySet().iterator() → `hasNext()`/`next()` → `get(key)`

選型原則

需求推薦
線程安全Vector / Hashtable / Collections.synchronizedXxx / ConcurrentHashMap
高性能單線程ArrayList / LinkedList / HashMap
鍵值對HashMap / Hashtable
大數據量+線程安全Vector(或分段鎖 ConcurrentHashMap)

IO 流體系

字節流(二進制)

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():釋放鎖,需在同步塊中,配合條件變量

JDBC 核心模式

Statement(靜態 SQL)

Statement st = con.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM table");

PreparedStatement(預編譯 + 防注入)

PreparedStatement ps = con.prepareStatement("SELECT * FROM table WHERE name=?");
ps.setString(1, "value");
ResultSet rs = ps.executeQuery();
  • **優勢**:預編譯提升批量性能、參數化防 SQL 注入
  • **驅動加載**:`Class.forName("com.mysql.jdbc.Driver")`(JDBC 4.0+ 可省略)

網絡編程 Socket 基礎

服務端

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()));

對象傳輸

  • 發送:`ObjectOutputStream.writeObject(obj)`
  • 接收:`ObjectInputStream.readObject()`
  • **前提**:類實現 `Serializable` 接口

數據庫 SQL 速查

  • 範圍:`BETWEEN 100 AND 200`
  • 模糊:`LIKE '李%'` / `LIKE '_明%'`
  • 集合:`IN (22,25,31)`
  • 空值處理:`ISNULL(age, 0)` / `COALESCE`
  • 排序:`ORDER BY age DESC, deptno ASC`
  • 分組過濾:`HAVING` 針對聚合結果
  • 自連接:`SELECT w.name, b.name FROM emp w, emp b WHERE w.mgr = b.empno`
  • 分頁(SQL Server):`SELECT TOP pageSize * FROM table WHERE id NOT IN (SELECT TOP pageSize*pageNum id FROM table)`
  • 去重:`SELECT DISTINCT * INTO #tmp FROM t; TRUNCATE t; INSERT t SELECT * FROM #tmp; DROP TABLE #tmp`

可變參數

public void exec(String sql, String... params) {
    // params 當作 String[] 使用
    for (int i=0; i

C# 對應 `params` 關鍵字。

總結

Java 與 C# 同屬靜態強類型 OOP 語言,核心概念高度重疊。**語法細節差異**是遷移初期主要阻力,重點掌握:集合遍歷差異、字符串比較、靜態塊、異常檢查、泛型擦除。建議配合 IDE 實戰練習,一周內可實現無縫切換。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved