继承体系
Throwable
- Error
- AWTError
- IOError
- LinkageError
- ThreadDeath
- …
- Exception
- RuntimeException
- IndexOutOfBoundsException
- NullPointerException
- ClassCastException
- …
- SQLException
- IOException
- …
- RuntimeException
Error:一般都是与虚拟机相关的问题,通常这些错误无法恢复或者不可能捕获。
Checked异常:除了RuntimeException意外事件的异常,要求程序员必须注意该异常,要么显式声明抛出,要么显式捕获,总之不能不闻不问。缺点:(1)增加了编程复杂度;(2)导致方法签名与异常耦合。- Error
public class DemoThrowAble {
public static void main(String args[]) {
try {
throw new IOError(new Exception());
}catch (Throwable e) {
System.out.println();
}
}
}
Java 7 多异常捕获
- 捕获多种类型的异常时,多种异常类型之间用竖线(|)隔开。
- 捕获多种类型的异常时,异常变量有隐式的final修饰,因此程序不能对异常变量重新赋值。
Java 7 自动关闭资源的try语句
public class DemoJava7 {
public static void main(String args[]) throws IOException {
//圆括号中声明、初始化一个或多个资源,这些资源必须实现AutoCloseable或者Closeable接口,其中Closeable接口里的close()方法声明抛出IOException,AutoCloseable接口里的close()方法声明抛出Exception,Closeable是AutoCloseable的字接口。
try (BufferedReader brBufferedReader = null){
}
}
public static void function() {
BufferedReader brBufferedReader = null;
}
}
Java 7 throw语句
public class DemoJava7 {
//从java7开始,Java编译器会减产throw语句抛出的异常的实际类型。
public static void main(String args[]) throws FileNotFoundException {
try {
new FileOutputStream("a.txt");
} catch (Exception e) {
//打印异常的跟踪栈信息,JVM对异常就是这样处理的。
e.printStackTrace();
throw e;
}
}
}
Java 9 自动关闭资源的try语句
public class DemoJava9 {
public static void main(String args[]) throws IOException {
// final
final BufferedReader brBufferedReader = null;
// 只要不对该变量冲洗赋值,则该变量时effectively final
PrintStream pStream = null;
try (brBufferedReader;pStream){
}
}
}
finally
只有当执行完finally块执行完之后,系统才会再次跳回来执行try块,catch块里的return或者throw语句,如果finally块里也使用了return或者throw等导致方法终止的语句,系统就不会跳回去执行return或者throw语句。
异常链
public class DemoJava4 {
public static void main(String args[]) throws Exception{
try {
new FileOutputStream("a.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
throw new MyException(e);
}
}
}
//从JDK1.4以后,所有的Throwable的子类在构造器中都可以接收一个cause对象作为参数。这个cause用来表示原始的异常。
class MyException extends Exception{
public MyException(Throwabke t){
supre(t);
}
}