先引进一个题:
以下能用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.
新闻热点
疑难解答