异常
什么是异常
在计算机程序运行时,总是会出现错误
于是Java内置了一套异常处理机制,总是使用异常来表示错误。
异常是一种class,他的继承树如下(部分展示)
由图可知Throwable是异常的根,且有两个体系:Error和Exception。
Error表示严重的错误,计算机对此无能为力:
- OutOfMemoryError:内存耗尽
- NoClassDefFoundError:无法加载某个Class
- StackOverflowError:栈溢出
而Exception是运行时候出现的错误,需要被捕获并且处理
某些异常是应用程序逻辑处理的一部分,应该捕获并处理(编译错误)。例如:
- NumberFormatException:数值类型的格式错误
- SocketException:读取网络失败
- FileNotFoundException:未找到文件
还有运行错误,比如: - NullPointerException
- IndexOutOfBoundsException:数组索引越界
捕获异常
在java里面,使用try…catch语句能够捕获异常,在try{ . . . }语句中放入可能报错的语句,然后由catch语句捕获异常。
多catch语句
可以使用多个catch语句,自上而下的进行捕获,当找到对应的异常时就不再捕获
try {
process1();
} catch (IOException e) {
System.out.println(e);
} catch (NumberFormatException e) {
System.out.println(e);
}
因此catch的顺序非常重要,必须是子类放在前面。
final语句
final语句可以保证无论发生什么异常,都会执行该语句
try {
process1();
} catch (IOException e) {
System.out.println(e);
} catch (NumberFormatException e) {
System.out.println(e);
}
final{
System.out.println(END!);
}
抛出异常
如何抛出异常?
- 创建某个Exception实例
- 用throw抛出
void process2(String s) {
if (s==null) {
throw new NullPointerException();
}
}
抛出的异常会交由方法的调用者去处理,如果没有则交由虚拟机处理。