异常
1. 异常类类图
在java世界里,所有的异常类都是Throwable的子类。 Throwable两个子类 Error 和 Exception, Error也是可以被捕获的,只是大多数情况下,认为出现error是致命的错误,不应该被忽略,所有大多数情况下都是捕获的Exception。
Exception的子类就是各种xxxException,而Error的子类就是各种XXXError了。
2. try-catch-finally
示例:
package com.fun.lang;
/**
* finally是不是一定执行
*
* @author fun
* @date 2017-03-27 17:17
*/
public class TryCatchDemo {
public static void main(String[] args) {
try {
System.out.println("into try block...");
// System.exit(0); // 打开此注释,会发现,finally里面的代码并没有执行,这个很好理解,虚拟机都退出了,怎么执行代码
throw new Error();
}catch (Throwable e) {
System.out.println("into catch block...");
}finally {
System.out.println("into finally block...");
}
}
}
/*
* output:
*into try block...
*into catch block...
*into finally block...
*/
结论:
- finally里面的代码不一定执行的,例如虚拟机退出了
- Throwable两个子类 Error 和 Exception, Error也是可以被捕获的,只是catch的是当前捕获的Error或者更上级的类才行捕获Error
- catch的是时候可以catch到最顶层Throwable,这样整个异常系统里面的东西都能捕获
3. 自定义异常
根据上面类图的结构,如果想要定义一个自己的一样,可以继承Exception。当然也可以自定义一个错误,继承Error就好了。