這個問題在這里已經有了答案: 拋出例外物件創建 (3 個回答) 17 小時前關閉。
通常我們使用“new”關鍵字來創建物件,我知道 (String s = "Hello") 也會創建一個物件,但在 catch 塊中它剛剛提到了catch(ArithmeticException e). 'e' 是一個物件嗎?
public static void main(String[] args) {
try {
int data=50/0; //may throw exception
}
//handling the exception
catch(ArithmeticException e) {
System.out.println(e);
}
System.out.println("rest of the code");
}
}
uj5u.com熱心網友回復:
當拋出 ArithmeticException 型別的例外時,try 塊中的代碼是在運行時創建的物件。因此,在 catch 塊中,變數 e 在運行時成為一個物件。
uj5u.com熱心網友回復:
我相信你問的ArithmeticException是如何在你的例子中創建的。(new在這種情況下,您顯然沒有明確使用來創建它。)
答案是 JVM 創建它。當 JVM 檢測到整數被零除時,它會創建一個ArithmeticException帶有訊息字串“除以零”(或類似的)的實體,然后拋出它。
問:它如何檢測除以零以及如何創建和拋出例外?
答:所有這些都是特定于實作的1。但是如果您反匯編位元組碼,您將看不到任何特定的位元組碼指令來執行此操作。它發生在較低的層次上。從概念上講,它發生在除法指令中。
無論如何,ArithmeticException物件確實被創建,然后例外處理程式將它系結(分配)到e變數。
1 - 例如,在某些硬體上,整數除以零會觸發中斷。這將被向 JVM 發出信號的作業系統例外處理程式捕獲。最終,信號處理程式(在 JVM 深處)找出哪個執行緒做了它,創建例外物件并“拋出”它。它是雜亂復雜的低級內容……在撰寫 Java 程式時您不需要了解這些內容。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/324100.html
上一篇:C 嵌套try-catch捕獲相同的例外-我應該如何重寫此代碼?
下一篇:執行觸發器陳述句時出現錯誤
