java基础之异常

一、概念

在程序运行的过程中,出现的不正常情况叫做异常

二、注意点

  1. 相同的代码在运行的时候,根据输入的参数或者操作的不同,有可能发生异常,有可能不会发生异常,应该在写代码的过程中尽可能的保证代码的正确性,不要到处都bug。
  2. 如果要解决代码中出想的异常,需要添加非常复杂的代码逻辑进行判断,会是代码变得非常臃肿,不利于维护,可读性差。因此,推荐使用异常处理机制处理程序运行过程中出现的问题。

  3. 程序在运行过程中,如果出现了问题,会导致后面的代码无法正常执行,而是用异常处理机制后,可以对异常情况进行处理,同时后续的代码会继续执行,不会中断整个程序。

  4. 在异常的处理过程中,不要只是简单地输出错误信息,要尽可能的将详细的异常信息进行输出。Eg:e.printStackTrace();打印异常的堆栈信息。可以从异常信息的最后一行开始追踪,寻找自己编写的java类。e.getMessage(),是.printStackTrace()输出信息的一部分。不常用。

  5. 在使用多重的catch时候,一定要注意相关异常的顺序,将子类放在最前面的catch,父类放在最后面的catch。

  6. 在程序运行过程中,如果处理异常的部分包含finally的处理,那么无论代码是否发生异常,finally中的代码总会执行。

三、常见的异常类型

  • Exception:异常层次结构的父类

  • ArithmeticException:算数错误异常,如以0作为除数

  • ArrayIndexOutOfBoundsException:数组下标越界

  • NullPointerException 尝试访问null对象成员

  • ClassNotFoundException 不能加载所需的类

  • IllegalArgumentException方法接收到非法参数

  • ClassCastException 对象强制类型转换出错

  • NumberFormatException 数字格式转换异常,如把“abc”转换成数字

四、异常处理的3种方式

  1. 捕获异常

    1.1 try{代码逻辑}catch(Exception  e){异常处理逻辑}

    1.2 try{代码逻辑}catch(具体的Exception  e){异常处理逻辑}}catch(具体的Exception· e){异常处理逻辑} Finally{无论如何都会执行的代码(除了system.exit(0)}

  2. 声明异常——throws

    异常情况出现的时候,可以使用try-catch-finally的方式对异常进行处理,除此之外,可以将异常向外抛出,由外部进行处理。

    1. 在方法调用过程中,可以存在N个方法之间的调用,此时假如每个方法中都包含了异常情况,那么就需要在每个方法中都进行try-catch,另外一种比较简单的方式,就是在方法的最外层调用处理一次即可,使用throws的方法,对所有执行过程中的所有方法出现的异常进行集中统一处理。

    2. 如何判断是使用throws还是使用try-catch?

      最稳妥的方式是在每个方法中都进行异常的处理。

      偷懒的方式是判断在整个调用过程中,外层的调用方法是否对异常的处理,如果有,直接使用throws,如果没有,就要使用try-catch。

  3. 抛出异常——throw

    自定义异常:

    在java的api中提供了非常丰富的异常类,但是在某些情况下不太满足我们的需求,此时需要自定义异常:

    步骤:

    1. 继承Exception类

    2. 自定义实现构造方法

    3. 需要使用的时候,使用throw new自定义异常的名称

五、异常的分类

Throwable

  1. Error:系统级错误,代码无法解决

  2. Exception:在代码级别解决的错误

    • Checked异常:编译时异常,IDE在编译的时候,会报波浪线的错误

    • 运行时异常:在程序运行过程中,可能会出错,可能不会出错。建议一定要处理

六、其他

  1. Java的异常处理通过5个关键字?
    try catch finally :抛出异常
    throw :抛出异常
    throws :声明异常
  2. throw和throws的区别 ?
    ①throw用于抛出异常,throws用于声明异常
    ②throw用于方法内部,throws用于方法声明上
    ③throw后跟异常对象,throws后跟异常类型
    ④throw后只能跟一个异常对象,throws后可以一次声明多种异常类型
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值