Java調試(debug)是開發過程中非常重要的一環,它幫助我們找到并修復代碼中的錯誤。以下是一些經典的Java調試案例:
空指針異常(NullPointerException):
null
時,會拋出空指針異常。null
的對象引用,確保在使用前進行非空檢查。public class Example {
public static void main(String[] args) {
String str = null;
System.out.println(str.length()); // 這里會拋出NullPointerException
}
}
數組越界異常(ArrayIndexOutOfBoundsException):
public class Example {
public static void main(String[] args) {
int[] arr = new int[3];
System.out.println(arr[3]); // 這里會拋出ArrayIndexOutOfBoundsException
}
}
類型轉換異常(ClassCastException):
public class Example {
public static void main(String[] args) {
Object obj = "Hello";
String str = (String) obj; // 這里會拋出ClassCastException
}
}
數組初始化異常(NegativeArraySizeException):
public class Example {
public static void main(String[] args) {
int[] arr = new int[-5]; // 這里會拋出NegativeArraySizeException
}
}
邏輯錯誤:
public class Example {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
for (int i = 0; i < arr.length; i++) {
if (arr[i] == 2) {
arr[i] = 42; // 這里可能是邏輯錯誤
}
}
System.out.println(arr[1]); // 預期輸出2,實際輸出42
}
}
并發問題:
synchronized
關鍵字、Lock
接口)來確保線程安全。public class Example {
private static int counter = 0;
public static void main(String[] args) {
Thread t1 = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
counter++;
}
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
counter--;
}
});
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println(counter); // 預期輸出0,實際輸出可能不是0
}
}
通過這些經典案例,你可以更好地理解和掌握Java調試的技巧和方法。