Java异常&处理异常
一、什么是异常
在Java程序运行时,会发生意料之外的情况,这种情况被称为例外或者异常,异常的出现,往往会中断程序的运行。在Java中,异常也是一个对象,当程序发生异常时,就会出现一个异常对象,其中包括异常类型、异常信息、异常原因等信息。
举个例子:当你穿上鞋,走路时发现左右脚穿反了,这时候,就是发生了异常,当然,这个异常不是致命的,你可以选择继续这样穿下去,继续走路,但是这样可能会引发其他严重的后果。大多数时候,我们会中断当前的事情,脱下鞋子,换过来。
二、异常分类
1. 编译时异常
当我们编写Java代码时,编译器会对代码进行检查,如果有异常则不能通过编译,所以此类异常一旦出现,就必须处理。
2. 运行时异常
运行时异常,即编译时不会报错,在运行时发生的异常。此类异常不强制处理,但是就像上面举的“穿鞋”的例子,假如不处理,可能会引发其他更严重的错误。
三、 处理办法
无论是编译时异常还是运行时异常,理论上都需要我们去处理,假如不处理异常,JVM的默认处理办法是,在异常发生的位置终止程序,然后输出异常的信息。
1. throws
使用 throws
抛出异常,由JVM处理,即以默认方式处理异常:在出现异常的位置终止异常;
2. thy…catch…
使用 try...catch..
环绕:
try{
// 出现异常的代码
};catch (异常类1 异常对象){
// 处理异常
};catch (异常类2 异常对象){
// 处理异常
};...
...
final{
//
};
将出现或者可能出现异常的代码放在 try
后面的大括号中,在下方的 catch
的小括号中,即catch的参数为一个异常对象,在之后的大括号中,则是出现此类异常时的处理方法。
try...catch...
这里有些类似与 if...else...
语句,try
后面的代买可以看作 if
语句的条件,如果发生异常,则到下方寻找对应的异常类型,执行对应的处理办法:
// 类比成下列代码
if(发生了异常类型1){
// 处理办法1
};else if(发生了异常类型2){
// 处理办法2
};else if(发生了异常类型3){
// 处理办法3
};......
3. 二者结合
throws
和 try...catch...
配合使用:
在可能出现异常的方法名后使用 throws
抛出异常,在此方法处不处理异常,调用者在调用此方法时,需要集中捕获处理异常
如:
class Fun {
public void fun() throws RuntimeException {
int a = 5 / 0;
};
};
public class Main {
public static void main(String[] args){
Fun fun = new Fun();
try {
fun.fun();
}; catch (RuntimeException e) {
e.printStackTrace();
System.out.println("处理异常!");
};
};
};
在上面的例子中,Fun 类并未处理异常,而是使用 throws
将异常抛出,而在下方调用时,则需要使用 try...catch...
环绕,捕获处理异常。