1. 异常分为两大类:
1). Checked exception (非Runtime Exception) // 编译期会报错
2). Unchecked exception (Runtime Exception) // 编译期不会报错
2. Java中的所有异常都会直接或间接的继承自Exception
3. RuntimeException类也是直接继承自Exception类,它叫做运行时异常,Java中所有的运行时异常都会直接或间接地继承自RuntimeException。
4. Java中凡是继承自Exception而不是继承自RuntimeException的类都是非运行时异常。
5. 异常处理的一般结构是:
try{
}
catch(Exception e){
}
finally{
}
无论程序是否出现异常,finally 块中的代码都是会被执行的。
6. 对于非运行时异常(checked exception) ,必须要对其进行处理,处理方式有两种:
第一种是使用 try.. catch…finally 进行捕获;
第二种是在调用该会产生异常的方法所在的方法声明 throws Exception
7. 对于运行时异常(runtime exception) ,我们可以不对其进行处理,也可以对其进行处理。推荐不对其进行处理。
8. 所谓自定义异常, 通常就是定义了一个继承自 Exception 类的子类,那么这个类就是一个自定义异常类。通常情况下,我们都会直接继承
自 Exception 类,一般不会继承某个运行时的异常类。
9. 我们可以使用多个 catch 块来捕获异常,这时需要将父类型的 catch 块放到子类型的catch 块之后,这样才能保证后续的catch可能被执行,
否则子类型的 catch将永远无法到达,Java 编译器会报编译错误;如果多个 catch 块的异常类型是独立的(MyException, MyException2),
那么谁前谁后都是可以的。
10. 如果 try 块中存在 return 语句,那么首先也需要将 finally 块中的代码执行完毕,然后方法再返回。
11. 如果 try 块中存在 System.exit(0)语句,那么就不会执行 finally 块中的代码,因为System.exit(0)会终止当前运行的Java虚拟机,
程序会在虚拟机终止前结束执行。
12. 自定义异常是为了根据我们的意志返回一些制定的信息,方便我们及时准确的发现问题所在。
同时避免大量无用日志信息的输出,导致磁盘写满。