我有一個實踐問題,下面的代碼:爲什麼此異常不會導致運行時錯誤?
public class Test {
static String s = "";
public static void m0(int a, int b) {
s += a;
m2();
m1(b);
}
public static void m1(int i) {
s += i;
}
public static void m2() {
throw new NullPointerException("aa");
}
public static void m() {
m0(1, 2);
m1(3);
}
public static void main(String args[]) {
try {
m();
} catch (Exception e) {
}
System.out.println(s);
}
}
在方法2,當拋出NullPointerException異常,爲何不終止線程如我所料?我認爲在同一個方法中沒有try catch塊,它會導致異常並暫停程序。
據我瞭解,它已經恢復到先前調用的方法,M0,當我想拋出的異常會暫停該計劃。最終的結果是程序打印1,作爲s的值。
一切我已閱讀到目前爲止有關例外並不能解釋這個邏輯,我不能工作了我自己,所以我希望我能得到一些幫助!提前致謝。
沒有你嘗試調試? – AdamSkywalker
異常會一直冒泡,直到它們被捕獲或從執行堆棧頂部冒泡。這意味着'main()'中的'catch'會捕獲並執行任何操作,因爲catch塊是空的。把一些輸出在那裏(例如'的System.out.println(「嘿,我抓到的東西」);',然後再試一次 –
@AdamSkywalker耶剛剛試了一下,它與編譯和運行沒有問題,它只是打印1 – Sam