Java中的异常机制

> 本BLOG上原创文章未经本人许可,不得用于商业用途。转载请注明出处,否则保留追究法律责任的权利。

  • 基本概念

    异常就是"不正常"的含义,在Java语言中用于表示运行阶段发生的错误。
    java.lang.Throwable类是Java语言中所有错误(Error)异常(Exception)的超类。
    其中
    Error类
    主要用于描述比较严重无法编码解决的问题,如:JVM挂机。
    其中Exception类主要用于描述比较轻微可以编码解决的问题,如:0作为除数。

  • 基本分类

    java.lang.Exception类是所有异常类的超类,主要分为以下两大类:
    RuntimeException - 运行时异常,也叫作非检测性异常
    IOException和其它异常 - 其它异常,也叫作检测性异常

    ​所谓检测性异常就是在编译阶段能够被编译器检测出来的异常

    其中RuntimeException类的主要子类(Java开发中五种常见异常):
    ArithmeticException - 算术异常
    ArrayIndexOutOfBoundsException - 数组下标越界异常
    NullPointerException - 空指针异常
    ClassCastException - 类型转换异常
    NumberFormatException - 数字格式异常

    注意:
    当程序执行过程中发生异常但没有手动处理时由Java虚拟机采用默认方式处理,而默认处理方式就是:打印异常名称、异常原因、异常发生的位置等并终止程序。

  • 框架图

在这里插入图片描述

  • 异常的避免

    在开发中尽量使用if条件判断来避免异常的发生。

  • 异常的捕获

    1. 语法格式

      try {
            编写可能发生异常的语句;
         } 
         catch(异常类型 变量名) {
            编写针对该类异常的处理语句;
         } 
         ...
         finally {
            编写无论是否发生异常都应该执行的语句;
         } 
      
    2. 注意

      a.当需要编写多个catch分支时,切记小类型的异常应该放在大类型异常的上面。
      懒人的写法:
      catch(Exception e){ … }
      b.finally主要用于编写善后处理的语句,如:关闭已经打开的文件等。

    3. 执行流程

      try {
            a;
            b;  - 可能发生异常的语句
            c;
         } catch(...) {
            d;
         } finally {
            e;
         }
      

      当上述程序执行过程没有发生异常时的执行流程:a b c e;
      当上述程序执行过程发生异常时的执行流程:a b d e;

  • 异常的抛出

    1. 基本概念

      在某些特殊情况下产生的异常无法处理或者不便于处理时,就可以将该异常转移给该方法的调用者,这种方式就叫做异常的抛出

    2. 语法格式

      访问权限 返回值类型 方法名称(形参列表) throws 异常类型1, 异常类型2, …{}; 如:

      public void show() throws IOException {}
      
    3. 方法重写的原则

      a.要求方法名相同、参数列表相同、返回值类型相同,从jdk1.5开始允许返回子类类型
      b.要求方法的访问权限不能变小,可以相同或者变大
      c.要求不能抛出更大的异常

  • 自定义异常

    1. 基本概念

      虽然Java官方提供了大量的异常类,但一定不会包含所有开发中可能出现的异常,在Java程序中若需要表达特定问题的特定异常时,就需要程序员自定义异常来描述。

    2. 实现流程

      a.自定义xxxxException继承自Exception类或者其子类;
      b.提供两个版本的构造方法:无参构造方法 和 字符串作为参数的构造方法;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值