本文匯總 8 個經典 Java 基礎課堂練習,涵蓋計算機數制表示、枚舉類型本質、變量作用域遮蔽、數據類型轉換精度損失、浮點數運算陷阱、BigDecimal 精確計算、字符串拼接優先級、除零異常處理。每題附帶代碼、運行結果與深度解析,助你夯實基本功。
Java 結論:int 32 位補碼表示範圍 [-2^31, 2^31-1],所有位運算 (<<, >>, >>>, &, |, ^) 均基於補碼。
enum Size { SMALL, MEDIUM, LARGE }
public class EnumTest {
public static void main(String[] args) {
Size s = Size.SMALL;
Size t = Size.LARGE;
System.out.println(s == t); // false
System.out.println(s.getClass().isPrimitive()); // false
Size u = Size.valueOf("SMALL");
System.out.println(s == u); // true
for (Size v : Size.values()) System.out.println(v);
}
}
false
false
true
SMALL
MEDIUM
LARGE
== 與 equals() 效果相同,均比較引用地址。valueOf(String) 返回同名常量單例,values() 返回所有常量數組。final class Size extends Enum<Size>,不可繼承。public class My1 {
private static int value = 1; // 類變量(全局)
public static void main(String[] args) {
int value = 2; // 局部變量
System.out.println(value); // 輸出 2
}
}
this.value 或 My1.value 顯式訪問。
float f = 1.0f; 必須加 f,否則 1.0 默認 double 編譯錯誤。System.out.println(0.05 + 0.01); // 0.060000000000000005
System.out.println(1.0 - 0.42); // 0.5800000000000001
BigDecimal f1 = new BigDecimal("0.05"); // 字符串構造 - 精確
BigDecimal f2 = BigDecimal.valueOf(0.01); // valueOf(double) - 精確
BigDecimal f3 = new BigDecimal(0.05); // double構造 - 攜帶誤差!
System.out.println(f1.add(f2)); // 0.06 ✓
System.out.println(f3.add(f2)); // 0.06000000000000000471... ✗
構建 BigDecimal 必須使用字符串構造器或 valueOf(double),絕不使用 new BigDecimal(double)。
int X=100, Y=200;
System.out.println("X+Y=" + X + Y); // "X+Y=100200" (字符串拼接)
System.out.println(X + Y + "=X+Y"); // "300=X+Y" (先算數學加法)
| 運算 | 結果 | 判斷方法 |
|---|---|---|
| 非 0 / 0.0 | Infinity (正/負) | Double.isInfinite(d) |
| 0.0 / 0.0 | NaN (Not a Number) | Double.isNaN(d) |
| 整數 / 0 | ArithmeticException | try-catch 捕獲 |
double a=0, b=50, c=-50;
System.out.println(a/a); // NaN
System.out.println(b/a); // Infinity
System.out.println(c/a); // -Infinity
這 8 個練習覆蓋了 Java 基礎中最易混淆、最易出錯的核心知識點。建議將代碼全部敲一遍,觀察輸出,並嘗試修改參數驗證邊界條件,真正內化為肌肉記憶。