在计算机程序运行的过程中,总是会出现各种各样的错误。
有一些错误是用户造成的,比如,希望用户输入一个int类型的年龄,但是用户的输入是abc:
// 假设用户输入了abc:String s = "abc";int n = Integer.parseInt(s); // NumberFormatException!
程序想要读写某个文件的内容,但是用户已经把它删除了:
// 用户删除了该文件:String t = readFile("C:\\abc.txt"); // FileNotFoundException!
所以,一个健壮的程序必须处理各种各样的错误。
所谓错误,就是程序调用某个函数的时候,如果失败了,就表示出错。
调用方如何获知调用失败的信息?有两种方法:
方法一:约定返回错误码。
例如,处理一个文件,如果返回0,表示成功,返回其他整数,表示约定的错误码:
因为使用int类型的错误码,想要处理就非常麻烦。这种方式常见于底层C函数
int code = processFile("C:\\test.txt");if (code == 0) {// ok:} else {// error:switch (code) {case 1:// file not found:case 2:// no read permission:default:// unknown error:}}
方法二:在语言层面上提供一个异常处理机制。
Java内置了一套异常处理机制,总是使用异常来表示错误。
异常是一种class,因此它本身带有类型信息。异常可以在任何地方抛出,但只需要在上层捕获,这样就和方法调用分离了:
try {String s = processFile(“C:\\test.txt”);// ok:} catch (FileNotFoundException e) {// file not found:} catch (SecurityException e) {// no read permission:} catch (IOException e) {// io error:} catch (Exception e) {// other error:}
