【Java】异常(Exception)

【Java】异常(Exception)

1.1 异常的概念

异常是指程序运行过程中发生的错误,如用户输入错误、除数为零、数组下标错误等。

异常处理是指程序在出现问题时不被中断,依然可以正确的执行完。如果异常不被处理程序将非正常终止。

1.2 异常的分类

Java 对异常进行了分类,不同类型的异常分别用不同的 Java 类表示。java.lang.Throwable 类是所有异常类的父类,他有两个直接子类:Error 类和 Exception 类。Error 类型的异常是程序无法处理的,表示运行程序中较严重的问题,代码编写者无需进行处理。Exception 是程序本身能过处理的异常,在 Java 程序设计时,需要关注 Exception 类。通常 Java 的异常可分为:RuntimeException 运行时异常和 CheckedException 已检查异常。

1.2.1 RuntimeException 运行时异常

派生于 RuntimeException 的异常包含以下几种情况:

  • ArithmeticException 算术运算异常

  • NullPointerException 空指针异常

  • ClassCastException 类型转换异常

  • ArrayIndexOutOfBoundsException 数组下标越界异常

  • NumberFormatException 数字格式异常

    这些异常通常是由编译错误导致的,即设计或实现方式不当导致的问题。

1.3.2 CheckException 已检查异常

所有不是 RuntimeException 的异常统称为 CheckException。这类异常在编译时就必须做出处理,否则无法通过编译。处理方式有两种:使用 “try-catch-finally” 捕获异常、使用 "throws"声明异常。

2.1 异常的处理

2.1.1 捕获异常

捕获异常是通过 “try-catch-finally” 三个关键字来实现的。将可能产生异常的语句放入到 try{ } 语句中,然后在该语句块后跟一个或多个 catch 语句块,当 try{ } 语句中产生的异常与某个 catch 语句处理的异常类型相匹配,则执行该 catch 块。finally 语句块用于为异常处理提供一个统一的出口,无论 try{ } 语句块中是否产生异常,finally 语句块中的所有语句都会被执行(catch 语句块可以有多个;finally 语句块最多只能有一个,根据需要可有可无)。

try-catch-finally 组合语句的语法如下:

try {
   
    //一条或多条可能抛出异常的语句
}catch (ExceptionType1 e) {
   
    //当 ExceptionType1 类型的异常抛出后将要执行的代码
}catch (ExceptionType2 e) {
   
    //当 ExceptionType2 类型的异常抛出后将要执行的代码
}
......
[finally {
   
    // 无论是否发生异常,都要被执行的语句块
}]

■ try:

在执行过程中,当任意一条语句产生异常时,就会跳过 try{ } 语句块中后面的代码,且当异常处理结束后,也不会回到 try{ } 语句块中执行尚未执行的代码。

■ catch:

常用方法(这些方法均继承 Throwable 类):

​ ● toString() 方法,显示异常的类名和产生异常的原因。

​ ● getMessage() 方法,只显示产生异常的原因,不显示异常的类名。

​ ● printStackTrace() 方法,用来跟踪异常事件发生时堆栈的内容。

catch 捕获异常时的捕获顺序:

​ 如果异常类之间有继承关系,在顺序安排时将子类放在前面。

2.2.1 声明异常(throws)

throws 关键字是在方法声明中用来指明该方法可能抛出的所有异常,方法不处理这些异常,而是调用层次向上传递,谁调用这个方法,这个异常就由谁来处理。调用可能会抛出异常的方法,必须添加 try-catch-finally 代码块尝试去捕获异常或者添加 throws 声明来将异常抛出给更上一层的调用者进行处理

如果一个方法抛出多个已检查的异常,就必须在方法的首部列出所有的异常,之间用逗号隔开。如下面这个例子所示:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值