鍍金池/ 問答/Java/ Java異常是如何實現的

Java異常是如何實現的

Java里面的異常分為運行時異常(RuntimeException)和檢查異常(checked exception
對于很多異常,在程序中throw new Exception()這樣的語句就申明了一個異常
如果是運行時異常,可以在程序中處理,也可以不處理,對于檢查異常,必須要處理它
有一個問題,就是那些沒有申明的異常時怎么把它拋出來的呢,就比如

obj.method();

obj==null 的時候,一定會拋出NPE,但是在method()里面并沒有這樣的語句

method(){
    if(this==null)
     throw new NullPointException();
}

那類似這樣的 Exception 是怎么實現的呢

是在JVM做的?
那如果是在JVM中做的,那JVM對哪些檢查異常做了這樣的事呢,JVM又是怎么做的呢?

@劍心無痕說得對,我這里面問題確實很明顯,obj是空,跟本沒有辦法找到method這個方法。
不過我還想要了解“null.method()”的時候,這個NullPointException是怎么給拋出來的,Java代碼也沒有看到哪里拋出了NullPointException?

回答
編輯回答
絯孑氣

obj.method()是怎么調用?是不是得先找到obj的內存地址,獲取obj的類型(或者是其他什么能識別的東西),然后找到method的偏移地址,調用method。而當obj是null的時候,連method都找不到,怎么會去在method里拋出異常。
多參考參考別人的博客吧 https://blog.csdn.net/qq_3161...

PS:如果用興趣了解底層,可以嘗試把java轉成匯編,看看具體是如何實現的

2018年5月12日 13:33
編輯回答
萌吟

你好,簡單的說JVM是不處理異常的,一般是直接掛掉,所以有了異常處理機制,將異常分為Error和Exception,細分的話還有非檢查異常與檢查異常、運行時異常與非運行時異常,我們白話的講解下,異常跑出是對應的線程與類型還有說明,Java應用程序異常處理機制:拋出異常、捕捉異常。
有一個點:一個方法所能捕捉的異常,一定是Java代碼在某處所拋出的異常。簡單地說,異??偸窍缺粧伋?,后被捕捉的。(具體還有很多學問)
參考:
java中的異常和處理機制
淺談java異常
菜鳥-java異常分析

2018年1月22日 10:01