异常处理机制可以保证程序出错后依然正确的执行。
01 异常的分类
异常最大的父类是Throwable,Throwable有两个子类:Exception和Error。Exception表示程序可处理的异常,而Error表示JVM错误。
Exception有一个RuntimeException子类,我们自定义异常的时候可以继承Exception或者RuntimeException,如果继承Exception的是编译型异常,在编译时要求用户进行强制性的处理,如果继承RuntimeException是运行时异常,用户可以根据自己的需要选择性的处理。
02 异常的处理方式
每当出现一个异常,就会实例化一个对应的异常实例对象,当然也可以通过throw关键字手动创建一个异常抛出去throw new RuntimeException("这有一个问题!")
。
异常的处理有两种方式,一种是通过try{}catch(){}finally{}捕获异常,一种是通过在方法上加throws来声明异常,让方法的调用者去处理异常。
如果异常没有被成功处理,则会交给JVM默认处理,先打印错误信息,后程序停止运行。
03 "return"和"finally"的执行问题
假如现在有一个方法,方法本身有一个return语句,但是在finally中又写了一个return,那么会返回哪一个数据呢?
class Message {
public static String echo(String message){
try {
return "hello";
}finally {
return "你好";
}
}
}
System.out.println(Message.echo());//你好
finally代码块永远都要执行,所以在finally中可以实现return数据的修改。
块永远都要执行,所以在finally中可以实现return数据的修改。