先引進(jìn)一個(gè)題:
以下能用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原來(lái)十個(gè)類(lèi),我一直以為有able的都是接口。。他只實(shí)現(xiàn)了serializeble。
再來(lái)看他的主要的子類(lèi)結(jié)構(gòu)
![]()
只有三個(gè)類(lèi)繼承他:
一個(gè)Error:這種錯(cuò)誤被設(shè)計(jì)成不被捕獲,產(chǎn)生于jvm自身。不需要去throw或catch它以及他的子類(lèi)。
![]()
一個(gè)Exception:這種是在程序中應(yīng)該捕獲的異常,其中它里面的runtimeexception又是一個(gè)特殊的子類(lèi)。
這里面子類(lèi)太多了,就不貼圖了,有需要可以自己查看哈
還有一個(gè)StackRecorder:名字意思是“棧記錄器”,貌似未直接在jdk里面開(kāi)源,等以后碰到了再詳細(xì)了解。。
再說(shuō)runtimeexception:
![]()
也還是很多的,這里只截取一部分。。
這種異常的解釋是:java程序應(yīng)該捕獲,卻可以不去捕獲的一個(gè)異常。在大多數(shù)情況下,都不會(huì)去捕獲他,一個(gè)重要原因是這種異常可能發(fā)生的情況太普遍,幾乎每行代碼都會(huì)有RuntimeException的風(fēng)險(xiǎn),因此反而無(wú)需去捕獲了。JDK文檔中的原話(huà)是:“A method is not required to declare in its throws clause any subclasses of RuntimeException that might be thrown during the execution of the method but not caught.”在執(zhí)行的時(shí)候可能會(huì)拋出。例如除0.
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注