先引進(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 ofRuntimeException
that might be thrown during the execution of the method but not caught.”在執(zhí)行的時(shí)候可能會(huì)拋出。例如除0.
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注