简明 Java 错误处理机制
用个最简单的例子来展示为什么需要错误处理,以及怎么用。
import java.io.FileInputStream; import java.io.FileNotFoundException; public class ThrowsTest { public static void main(String[] args) throws FileNotFoundException { try { throwsTest(); } catch (FileNotFoundException e) { System.out.println("File is not found!"); throw e; } catch (NullPointerException e) { System.out.println(e); } System.out.println("hi"); } public static void throwsTest() throws FileNotFoundException,NullPointerException { new FileInputStream("shiyanlou.file"); throw new NullPointerException("have a try!"); } }
上面的代码中, throwsTest 抛出了两个 exception:一个错误是由它调用的方法 FileInputStream 抛给它的,另一个是它自己抛出的。
在 main 函数中,通过 try-catch 来捕捉这两个 exception 并处理。
基本原则是:
1. 抛出的 exception 肯定会被 catch。
2. catch 到的 exception 可以当场处理掉,则 exception 被终止。
3. catch 到的 exception 也可以再 throw 给上一级调用者处理。
4. 如果一级级往上抛,最终由 JVM 来 catch 的话,就是直接终止程序并打印 stack frame 错误。
我们使用 exception 的核心目的,就是为了避免第 3 中情况发生。
可以想象,如果因为某个文件没有找到,我们的软件就直接崩溃了,这是件很难接受的事情;从使用角度来讲,大不了重新指定路径。
所以,我们要努力做好前 3 件事。
前辈总结的 exception 使用心得:
exception 的继承关系:
发挥问题:是不是可以自己定义 Throwable ?
——————无论在哪里做什么,只要坚持服务、创新、创造价值,其他的东西自然都会来的。