【Java】Java语言基础之异常

Java异常

当程序运行的途中,发生了在期待中不应该发生的事件,这个时间阻止了程序按照程序员的预期正常执行,这类问题一般是程序员在编写程序时,忽略程序运行中可能导致的错误,是可以通过修改程序逻辑达到正确的结果的问题,被称为异常(Exception)。同时还有非程序逻辑错误,程序员也无法解决的问题,这类问题被称为错误(Error)。

在异常发生的时候,是让程序继续运行还是立刻终止退出程序,还是将错误反馈给程序用户?在Java中提供了更加优秀的解决方案:异常的处理机制。

异常处理

在Java中,异常处理机制会在程序发生异常的时候,按照代码预先设定的异常处理逻辑,有目的,针对性的处理这些异常,让程序尽最大的可能恢复正常并继续执行。
Java中的异常可以是函数中的语句执行的时候发生的,也可以是程序员向上手动抛出(throw),只要在Java程序中产生了异常,就会用一个对应类型的异常对象来封装异常,JRE就会试图寻找异常处理程序来处理异常。

Java中异常分类和类结构图

Java标准库中已经存在了一些通用的异常类,所以的异常类的顶级父类都是Throwable。
Throwable又派生出Error类和Exception类,在前面说到了Error类是程序员无法解决的问题,所以只要关注Exception类下的常用异常类即可。
在这里插入图片描述根据上图,异常类又可以分为俩种:

非检查异常(unckecked exception):

程序员在IDE中编写程序和javac在编译的时候,不会提示和发现这些异常,只有在程序运行时才会发现的一些异常,叫做非检查异常。对于这些异常,程序员应该修改代码,让程序如愿正常运行,而不是通过异常处理机制处理,因为这样的异常一般时程序逻辑有问题。

常见的此类异常有:
NullPointerException(空指针异常);
ArrayIndexOutOfBoundsException(数组下标越界);
ClassCastException(强制类型转换错误);

检查异常(checked exception):
程序员在编写代码时,javac或IDE会强制要求程序员为这些异常做预备处理工作,要么使用try…catch…finally语句将可能发生的异常处理并抛出,或者将这些异常通过向上抛出处理,否者编译无法通过,这样的异常一般是由程序的运行环境导致的,因为程序可能被运行在各种未知的环境下,而程序员无法干预用户如何使用他编写的程序,于是程序员就应该为这样的异常时刻准备着。

常见的此类异常有:
SQLException (SQL语句异常);
IOException(IO异常);
ClassNotFoundException(无法找到类异常);

异常处理语法

在编写代码处理异常时,对于检查异常,有2种不同的处理方式:使用try…catch…finally语句块处理它。或者,在函数签名中使用throws 声明交给函数调用者caller去解决。

try…catch…finally 语法
  try {
   //在try中放入可能会发生异常的代码片段
   //如果出现异常则会在catch中匹配相应的异常处理方法
   //finanlly不管是否出现异常都会执行其中的代码
  } catch (Exception e) {
   //每一个catch块用于捕获并处理一个特定的异常,或者这异常类型的子类。
   //catch后面的括号定义了异常类型和异常参数。如果异常与之匹配且是最先匹配到的,则虚拟机将使用这个catch块来处理异常。
   //如果try中没有发生异常,则所有的catch块将被忽略。
  }finally {
   //finally块不是必须的,是可选的。
   //无论异常是否发生,异常是否被匹配处理,finally中的内容都会被执行
   //一个try至少要有一个catch块,否则, 至少要有1个finally块。但是finally不是用来处理异常的,finally不会捕获异常。
   //finally主要做一些清理工作,如流的关闭,数据库连接的关闭等。
  }
 }

—————————分割线————————————————————————————————
以上内容都是目前所理解的,非最终版本,会根据工作和学习的深入慢慢加深理解,更新在上面(2020.5.19版)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值