一、概念
在程序运行的过程中,出现的不正常情况叫做异常
二、注意点
- 相同的代码在运行的时候,根据输入的参数或者操作的不同,有可能发生异常,有可能不会发生异常,应该在写代码的过程中尽可能的保证代码的正确性,不要到处都bug。
-
如果要解决代码中出想的异常,需要添加非常复杂的代码逻辑进行判断,会是代码变得非常臃肿,不利于维护,可读性差。因此,推荐使用异常处理机制处理程序运行过程中出现的问题。
-
程序在运行过程中,如果出现了问题,会导致后面的代码无法正常执行,而是用异常处理机制后,可以对异常情况进行处理,同时后续的代码会继续执行,不会中断整个程序。
-
在异常的处理过程中,不要只是简单地输出错误信息,要尽可能的将详细的异常信息进行输出。Eg:e.printStackTrace();打印异常的堆栈信息。可以从异常信息的最后一行开始追踪,寻找自己编写的java类。e.getMessage(),是.printStackTrace()输出信息的一部分。不常用。
-
在使用多重的catch时候,一定要注意相关异常的顺序,将子类放在最前面的catch,父类放在最后面的catch。
-
在程序运行过程中,如果处理异常的部分包含finally的处理,那么无论代码是否发生异常,finally中的代码总会执行。
三、常见的异常类型
-
Exception:异常层次结构的父类
-
ArithmeticException:算数错误异常,如以0作为除数
-
ArrayIndexOutOfBoundsException:数组下标越界
-
NullPointerException 尝试访问null对象成员
-
ClassNotFoundException 不能加载所需的类
-
IllegalArgumentException方法接收到非法参数
-
ClassCastException 对象强制类型转换出错
-
NumberFormatException 数字格式转换异常,如把“abc”转换成数字
四、异常处理的3种方式
-
捕获异常
1.1 try{代码逻辑}catch(Exception e){异常处理逻辑}
1.2 try{代码逻辑}catch(具体的Exception e){异常处理逻辑}}catch(具体的Exception· e){异常处理逻辑} Finally{无论如何都会执行的代码(除了system.exit(0)}
-
声明异常——throws
异常情况出现的时候,可以使用try-catch-finally的方式对异常进行处理,除此之外,可以将异常向外抛出,由外部进行处理。
-
在方法调用过程中,可以存在N个方法之间的调用,此时假如每个方法中都包含了异常情况,那么就需要在每个方法中都进行try-catch,另外一种比较简单的方式,就是在方法的最外层调用处理一次即可,使用throws的方法,对所有执行过程中的所有方法出现的异常进行集中统一处理。
-
如何判断是使用throws还是使用try-catch?
最稳妥的方式是在每个方法中都进行异常的处理。
偷懒的方式是判断在整个调用过程中,外层的调用方法是否对异常的处理,如果有,直接使用throws,如果没有,就要使用try-catch。
-
-
抛出异常——throw
自定义异常:
在java的api中提供了非常丰富的异常类,但是在某些情况下不太满足我们的需求,此时需要自定义异常:
步骤:
-
继承Exception类
-
自定义实现构造方法
-
需要使用的时候,使用throw new自定义异常的名称
-
五、异常的分类
Throwable
-
Error:系统级错误,代码无法解决
-
Exception:在代码级别解决的错误
-
Checked异常:编译时异常,IDE在编译的时候,会报波浪线的错误
-
运行时异常:在程序运行过程中,可能会出错,可能不会出错。建议一定要处理
-
六、其他
- Java的异常处理通过5个关键字?
try catch finally :抛出异常
throw :抛出异常
throws :声明异常 - throw和throws的区别 ?
①throw用于抛出异常,throws用于声明异常
②throw用于方法内部,throws用于方法声明上
③throw后跟异常对象,throws后跟异常类型
④throw后只能跟一个异常对象,throws后可以一次声明多种异常类型