Java基础(2)异常

异常

1,异常分析图解

在这里插入图片描述

2,异常分析

  • Throwable
    • Error 错误
      • NoClassDefFoundError 找不到class定义异常
      • StackOverfolwError 深递归导致栈被耗尽的异常
      • OutOfMemoryError 内存溢出异常
    • Exception 异常
      • RuntimeException
      • Unchecked Exception 非检查异常:不要求强制处理
        • NullPointerException 空指针异常
        • IndexOutofBoundsException 下标越界异常
        • ArithmeticException 算数异常
        • ClassCastException 类型转换异常
        • IllegalArgumentException 传递非法参数异常
        • NumberFormatException 数字格式异常
      • 非RuntimeException
      • Check Exception 检查异常:必须要处理
        • IOException IO异常
        • SQLException SQL异常
        • ClassNotFoundException 找不到指定class异常

Error:程序无法处理的系统错误,编译器不做检查。

Exception:程序可以处理的异常,捕获后可能恢复。

总结:前者是程序无法处理的错误,后者是可以处理的异常。

3,异常处理机制

  • 捕获异常:try,catch,finally。
  • 声明异常:throws。
  • 抛出异常:throw。

4,捕获异常

  • try - catch - finally语句块:

  • try - catch 或 try - catch - finally 或 try - finally在这里插入图片描述

  • try 后面可以接0或多个 catch,当没有catch的时候,一定要有finally

注意:

  • finally语句块里面最好不要使用return语句,因为会使前面的try、catch语句块里的return无效。

  • 如果有finally块,程序会先执行完finally块里面的代码,再执行return语句,无论return语句在哪里。

  • printStackTrace() --> 打印输出

5,声明异常

throws放在方法后面声明要抛出多个异常类型

注意:

1,如果一个方法throws抛出的是父异常Exception,因为其中包含必须处理的检查异常Check Exception,所以当调用此方法的时候就一定要处理。

2,如果一个方法throws抛出的是Exception的子异常非检查异常,又想要提醒信息,可以使用文档注释。/** */

3,throws定义的异常类型,可以为throw的本类或者其父类。

(throw:ArithmeticException throws ; throws:ArithmeticException / Exception)

6,抛出异常throw

throw用来主动抛出一个异常。如:throw new IOException();

throw抛出的只能是可抛出类Throwable或者其子类的实例对象。

throw主动抛出的异常:

  • 要么在抛出的方法内自己try-catch处理;
  • 要么方法头部throws声明抛出。

7,异常处理的注意点

  1. try-catch-finally块,在return前都会执行finally里面的代码。
  2. 要么本方法内try-catch-finally处理,要么throws抛给调用方处理。
  3. 要精确的捕获异常的类型,不要敷衍的直接使用Exception。
  4. 异常处理会消耗性能,所以要精确捕获可能出现异常的代码段,不要笼统的放入一大段代码。
  5. 不要生吞异常(捕获了什么都不做),会导致出现异常后难以诊断发生问题的地方。
  6. 异常的效率比ifelse的低。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值