Java 异常处理

处理异常的思想

异常情况会改变正常流程,导致恶劣的后果。为了减少损失,应该事先充分预计所有可能出现的异常,然后采取以下解决措施。

  1. 考虑避免异常,彻底杜绝异常的发生;若不能完全避免,则尽可能地减小异常发生的几率。
  2. 如果 有些异常不可避免,那么应该预先准备好处理异常的措施,从而降低或弥补异常造成的损失,或者恢复正常的流程。
  3. 对于某个系统遇到的异常,有些异常仅靠系统 本身就能处理;有些异常则需要系统 本身及其他系统 共同来处理。
  4. 对于某个系统 遇到的异常,系统本身应该尽可能地处理异常,实在没办法处理,才求助于其他系统处理。

Java 语言按照面向对象的思想来处理异常,使得程序具有更好的可维护性。Java异常处理机制具有以下优点

  • 把各种不同类型的异常情况进行分类,用Java类来表示异常情况,这种类被称为异常类。把异常情况表示成异常类,可以充分发挥类的可扩展和可重用的优势。
  • 异常流程的代码和正常流程的代码分离,提高了程序的可读性,简化了程序 的结构
  • 可以灵活地处理异常,如果 当前方法有能力处理异常就捕获并处理它,否则 只需要抛出异常,由方法调用者来处理它。
public class MyException extends Exception{
    public MyException(){}
    public MyException(String msg){super(msg)}
}

throw new MyException("一个异常");

异常的处理原则

异常只能用于非正常情况

  • 滥用异常流程会降低程序的性能
  • 用异常类来表示正常情况,违背了异常处理机制的初衷。在遍历array数组时,当访问到最后一个元素时,应该正常结束循环,而不是抛出异常。
  • 模糊了程序代码的意图,影响可读性
  • 容易掩盖程序 代码中的错误,增加高度的复杂性。

异常类的祖先类为 Java.lang.Throwable类

常用的方法:

  • getMessage()——返回String类型的异常信息
  • printStackTrance()——打印跟踪方法调用栈而获得的详细异常信息。在程序高度阶段,此方法可用于跟踪错误。

Throwable类有两个直接子类

  • Error类——表示仅靠程序 本身无法恢复的严重错误,比如内存空间不足,或者Java虚拟机的方法调用栈溢出。
  • Exception类——表示程序本身可以处理的异常,本章所有例子都是针对 这类异常的。

常见的异常

  • IOException:操作输入流和输出流时可能出现异常
  • ArithmeticException:数学异常。如果把整数除以0,就会出现这种异常
  • NullPointerException:空指针异常。当引用变量为null 时试图访问对象的属性或方法,就会出现这种异常。
  • IndexOutOfBoundsException:下标越界异常。它的子类ArrayIndexOutOfBoundsException表示数组下标越界异常
  • ClassCastException:类型转换异常。
  • IllegalArgumentException:非法参数异常

运行时异常

RuntimeException 类及其子类都被 称为运行时异常,这种异常的特点是Java编译器不会检查它,也就是说,当程序 中可能出现这类异常,即使没有用try……catch语句捕获它,也没有throws子句声明抛出它,还是会编译通过。由于程序 代码不会处理运行时异常,因此当程序 在运行时出现 了这种异常时,就会导致程序 异常终止。

受检查异常

除了RuntimeException及其子类以外,其他的Exception类及其子类都属于受检查 异常(Checked Exception)。这种异常的特点是Java编译器会检查它,也就是说,当程序 中可能出现这类异常时,要么用try……catch语句捕获它,要么用throws子句声明抛出它,否则 编译不会通过。

区分运行时异常和受检查异常

受检查异常表示程序可以处理的异常。如果抛出异常的方法本身不能处理它,那么方法调用者应该去处理它,从而使程序 恢复运行,不至于终止程序 。

区分运行时异常和错误

Error 类及其子类表示 程序 本身无法修复的错误,它和运行时异常的相同之处是:Java编译器都不会检查它们,当程序运行时出现它们,都会终止程序。

两者的不同之处是:Error类及其子类表示 的错误通常是由Java虚拟机抛出的,在JDK中预定义了一些错误类,比如OutOfMemoryErro和StackOutofMemoryError.在应用程序中,一般不会扩展Error类来创建用户自定义的错误类。而RuntimeException类表示程序 代码中的错误,它是可以扩展的,用户可以根据特定的问题领域来创建相关的运行时异常类。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值