先引進一個題:
以下能用throwable拋出的異常有?
A: Throwable
B:Event
C:Object
D:Error
E:Exception
F:RuntimeException
答案為ADEF;
首先能被throw的異常,必須得要能thowable吧,先看throwable的主要聲明:
public class Throwable implements Serializable { /** use serialVersionUID from JDK 1.0.2 for interOperability */ PRivate static final long serialVersionUID = -3042686055658047285L;}好吧,throwable原來十個類,我一直以為有able的都是接口。。他只實現了serializeble。
再來看他的主要的子類結構
只有三個類繼承他:
一個Error:這種錯誤被設計成不被捕獲,產生于jvm自身。不需要去throw或catch它以及他的子類。
一個Exception:這種是在程序中應該捕獲的異常,其中它里面的runtimeexception又是一個特殊的子類。
這里面子類太多了,就不貼圖了,有需要可以自己查看哈
還有一個StackRecorder:名字意思是“棧記錄器”,貌似未直接在jdk里面開源,等以后碰到了再詳細了解。。
再說runtimeexception:
也還是很多的,這里只截取一部分。。
這種異常的解釋是:java程序應該捕獲,卻可以不去捕獲的一個異常。在大多數情況下,都不會去捕獲他,一個重要原因是這種異常可能發生的情況太普遍,幾乎每行代碼都會有RuntimeException的風險,因此反而無需去捕獲了。JDK文檔中的原話是:“A method is not required to declare in its
throws
clause any subclasses ofRuntimeException
that might be thrown during the execution of the method but not caught.”在執行的時候可能會拋出。例如除0.
新聞熱點
疑難解答