Java的异常处理

异常

  • 异常(exception)又称为例外、差错、违例
  • 对应着Java运行错误处理机制

 基本写法

try {
    语句组
} catch (Exception e) {
    异常处理语句组
}

下面我们来看一个例子

try {
    int n = 1 / 0;
} catch (ArithmeticException ex) {
    System.out.println("捕获了一个 ArithmeticException 异常!");
    ex.printStackTrace();
} catch (Exception ex) {
    System.out.println("捕获了一个 Exception 异常!");
    ex.printStackTrace();
} finally {
    System.out.println("打印 finally 语句。");
}

Java中处理异常

  • 抛出(throw)异常
  • 运行时系统在调用栈中查找
    • 从生成异常的方法开始进行回溯,直到找到;
  • 捕获(catch)异常的代码

相关的语句

抛出异常

  • throw 异常对象;

捕获异常

try{
    语句组
}catch(异常类名异常 形式参数名){
    异常处理语句组;
}catch(异常类名异常 形式参数名){
    异常处理语句组;
}finally{
    异常处理语句组;
}

其中,可以有0到多个 catch,可以没有 finally。

异常的分类

  • Throwable(异常顶级父类)
    • Error:JVM的错误(我们应用程序一般不去管)
    • Exception:异常

 多异常的处理

  • 子类异常要排在父类异常的前面

finally语句

  • 无论是否有异常都要执行
    • 即使其中有 break,return 等语句
int a = 100;
System.out.println(a);
try {
    a = 200;
    System.out.println(a);
} catch (IndexOutOfBoundsException ex) {
    a = 300;
    System.out.println(a);
} catch (Exception ex) {
    a = 400;
    System.out.println(a);
} finally {
    a = 500;
    System.out.println(a);
}
a = 600;
System.out.println(a);

Exception分两种

  • RuntimeException及其子类,可以不明确处理
  • 否则,称为受检的异常(checked Exception)
    • 受检的异常,要求明确进行语法处理
    • 要么捕获(catch)
    • 要么抛出(throws):在方法的签名后面用 throws xxxx 来声明,而调用方法的类也同样如此要么捕获要么抛出。
      • 在子类中,如果要覆盖父类的一个方法,若父类的方法声明了 throws 异常,则子类的方法也可以 throws 异常
      • 可以抛出子类异常(更具体的异常),但不能抛出更一般的异常

面试题 

Error和Exception的区别?

        Error:JVM 无法解决的严重问题,如栈溢出StackOverflowError、内存溢出OOM等。程序无法处理的错误。

        Exception:其它因编程错误或偶然的外在因素导致的一般性问题。可以在代码中进行处理。如:空指针异常、数组下标越界等。

运行时异常和非运行时异常(checked)的区别?

unchecked exception包括RuntimeException和Error类,其他所有异常称为检查(checked)异常。

  1. RuntimeException由程序错误导致,应该修正程序避免这类异常发生。
  2. checked Exception由具体的环境(读取的文件不存在或文件为空或sql异常)导致的异常。必须进行处理,不然编译不通过,可以catch或者throws。

throw和throws的区别?

  • throw:用于抛出一个具体的异常对象。
  • throws:用在方法签名中,用于声明该方法可能抛出的异常。子类方法抛出的异常范围更加小,或者根本不抛异常。

在写项目时,也推荐将异常都统一的抛在某个类里面,方便统一一起管理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值