异常体系
异常的继承关系是Throwable-->error/Exception-->RunTimeException/ otherException:
Throwable 分为Error错误和Exception异常两种,Exception又分为:RunTimeException运行时异常 和 除了RunTimeException以外的所有继承自Exception的类。RunTimeException又叫做非强制捕获型异常,什么意思呢,就像玩滑板车,你带不带护具全看心情,大不了摔一跤,并不强制要求,在运行时有可能会抛出异常,导致程序崩溃。这类异常往往继承了RunTimeException或者RunTimeException本身。除了RunTimeException的所有继承自Exception的兄弟类都属于强制捕获型异常,就好比蹦极,如果你不做一些防护措施,比如栓根绳在腰上,主办方是不会让你去送死的。这类异常在编译的时候就会告诉你要想运行此程序,请先做好异常处理。
异常处理又分为两种:try /catch (自行处理异常) 和 Throws(抛给调用者去处理,如果调用者也不想处理,就再往上级抛,直到抛给最顶层,比如main方法等,在这一层级,如果继续往上抛,仍旧是没有问题的,交给JVM处理,但是jvm懒得理你,这异常相当于没有处理)。
自定义异常
自定义异常分为两种,正如上面提到的,根据继承关系来确定是运行时异常(继承自RunTimeException)还是非运行时异常(继承自Exception或者Exception的非RunTimeException的子类)。定义方式如下:
运行时异常定义
public class NameNullPointereException extends RuntimeException{
}
如果要想带参数,那需要重写构造方法
public class NameNullPointereException extends RuntimeException{
public NameEmptyException() {
}
public NameEmptyException(String s) {
super(s);
}
}
非运行时异常定义
二者只是继承上的区别,继承自Exception即可。需要注意的是调用时,必throws 或者 try/catch。