Java异常的捕获和处理

异常的捕获和处理

异常的概述

异常

  • 运行时异常

    • 运行时异常(RuntimeException)是一种特殊的异常,它是在程序运行过程中可能出现的错误

  • 编译时异常

    • 编译时异常是指那些在编译期间无法修复的错误。这些错误通常与语法错误或类型错误有关。编译器在遇到这些错误时,会立即报告并停止编译过程

异常的体系结构

  • Throwable(异常的顶级类)

    • Error类(系统无法恢复的严重错误)

    • Exception类(用于程序抛出和处理的非严重错误)(异常层次类的根类)

      • 受检异常(checked)(编译时异常)

        • IOException:IO异常的根类

          • FileNotFoundException:文件操作时找不到文件

      • 不受检异常(unchecked)(运行时异常)

        • RuntimeException:运行时异常的根类

          • ArithmeticException:算数运算异常

          • lllegalArgumentException:方法接受到非法参数

          • ArrayIndexOutOfBoundsException:数组越界访问异常

          • NullPointerException:空指针异常

          • ArrayStoreException:数组存储异常,对象或数据类型不兼容

          • ClassCastException:类型转换异常

          • lllegalThreadStartException:试图非法改变线程状态

          • NumberFormatException :数据格式化 异常

java异常处理机制

捕获异常

  • try-catch

    • 把可能出现异常的代码放在try语句块中,使用catch语句块捕获

    • 语法结构 : try{ //可能出现问题代码块 }catch(异常类型 变量名){

      //代码块 }

      • printStackTrace():输出异常的堆栈信息

      • getMassage():返回异常描述字符串

    • 当try代码块中没有异常catch将不会执行

    • 如果在try代码块执行时发现,抛出的异常在catch中没有声明,那么程序就会立即终止运行

  • try-catch-finally

    • 无论try代码块是否发生异常finally语句中的代码都会执行

    • 如果在try代码块或在catch代码块中有return语句,也先执行finally语句然后执行return

    • finally唯一不执行的情况是在异常处理代码块中执行了System.exit(1),退出Java 虚拟机

  • 多重catch处理异常

    • catch后面括号中的异常类型遵循“先子后父”。

抛出异常

  • throws

    • 声明方法中可能抛出异常,已通知调用者处理异常

    • 语法格式: public void test() throws 异常类型{ }

    • throws在方法体外抛出异常

  • throw

    • throw关键字用来在方法体内部抛出异常

    • 一般用来抛出自定义异常

  • throws和throw的区别

    • 1.throw用于程序员自行产生并抛出异常,throws用于声明方法内抛出了异常。

    • 2.throw位于方法体内部,可作为单独的语句使用;throws必须跟在参数列表后面,不能单独 使用。

    • 3.throw抛出一个异常对象,只能是一个;throws后面跟异常类,可以跟多个。

自定义异常

JDK中的异常类型不满足需要时,可以自定义异常类

自定义异常类的步骤

  • 1.定义异常类,并继承Exception或着RuntimeException

  • 2.编写异常类的构造方法,向父类构造传入异常描述信息,并继承父类的其他实现方法。

  • 3.实例化自定义异常对象,并在程序中使用throw抛出。

异常链

顾名思义就是将异常发生的原因一个传一个串起来,即把底层的异常信息传给上层,这样逐层抛出。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值