JAVA基础之异常

一、定义

在程序开发中,异常指不期而至的各种状况,它是一个事件,当发生在程序运行期间时,会干扰正常的指令流程。

在Java中,通过Throwable及其子类描述各种不同的异常类型。

二、分类

  1. Error(异常处理时不考虑)

    是指程序无法处理的错误,表示运行应用程序中较严重问题。

    这些错误是不可查的,因此他们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况

  2. Exception(异常处理类型)

    程序本身可以处理的异常。

    • unchecked exception

      编译器不要求强制处置的异常,在程序中可以选择捕获处理,也可以选择不处理,照样编译通过

      eg:NullPointerException(空指针异常)、
      IndexOutOfBoundsException(下标越界异常)

    • checked exception

      编译器要求必须处置的异常。

      eg:IOException、SQLException

三、异常处理

​ 异常总是先被抛出,再被捕获

  1. 抛出异常

    • 当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系
    统。
    • 异常对象中包含了异常类型和异常出现时的程序状态等异常信息。
    • 运行时系统负责寻找处置异常的代码并执行。

  2. 捕捉异常

    • 在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器。
    • 运行时系统从发生异常的方法开始,依次回查调用栈中的方法,当异
    常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合
    适的异常处理器。
    • 当运行时系统遍历调用栈而未找到合适的异常处理器,则运行时系统
    终止。同时,意味着Java程序的终止

常用关键字

  1. try-catch-finally(自己处理)

    public void method(){
        try {
        //  可能会产生异常的代码段 
        } catch ( 异常类型 ex) {
        //  捕获异常
        }finally{
        //  无论是否发生异常,总是执行
        }
    }
    
  2. try-catch(自己处理)

    public void method(){
        try {
        //  产生异常的代码段 
        } catch ( 异常类型 ex) {
        //  对异常进行处理的代码段
        }
        //try-catch执行完后执行
    }
    
  3. throws(抛给调用者处理)

    1. 定义:如果一个方法可能会出现异常,但没有能力处理这种异常,可以在方法声明处用throws子句来声明抛出异常

    2. throws语句用在方法定义时声明该方法要抛出的异常类型

      public void method() throws Exception1,Exception2,..,ExceptionN{  
      	//  可能产生异常的代码
      }
      
  4. throw(抛出异常)

    1.throw抛出异常对象的处理方案

    • 通过try…catch包含throw语句----自己抛自己处理

      public void method(){
          try {
          //  代码段 
          throw new  异常类型( );
          } catch ( 异常类型 ex) {
          //  对异常进行处理的代码段
          }
      }
      
    • 通过throws在方法声明处向上抛出异常类型----谁调用谁处理

      public void method() throws  异常类型{
          //  代码段 1
          throw new  异常类型( );
      }
      

  • 注意事项:
  1. try可以和finally组合,可以和catch组合,也可以三者一起使用,但try或catch或者finally不能单独使用

    所有组合形式:

    – try-catch
    – try-finally
    – try-catch-finally
    – try-catch-catch-finally

  2. try后面可以跟0到多个catch模块

  3. 多个catch语句的排列顺序:先子类后父类

  4. 理论来说finally块内的代码无论如何都会执行,除非在catch块中加入(System.exit(1)-----退出java虚拟机)

  5. 常见的异常类型

    异常类型说明
    Exception异常层次结构的父类
    ArithmeticException算术错误情形,如以零作除数
    ArrayIndexOutOfBoundsException数组下标越界
    NullPointerException尝试访问 null 对象成员
    ClassNotFoundException不能加载所需的类
    IllegalArgumentException方法接收到非法参数
    ClassCastException对象强制类型转换出错
    NumberFormatException数字格式转换异常,如把"abc"转换成数字
  6. 尽量去处理异常,切忌只是简单的调用printStackTrace()去打印输出

  7. 尽量添加finally语句块去释放占用的资源

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值