携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第25天,点击查看活动详情
Java的异常分为Exception 和 Error,他们都是java.lang包的Throwable类的子类。
- Exception 程序本身可以处理的异常
- Error 程序无法处理的错误 如Java 虚拟机运行错误(Virtual MachineError)、虚拟机内存不够错误(OutOfMemoryError)、类定义错误(NoClassDefFoundError)等 。这些异常发生时,Java 虚拟机(JVM)一般会选择线程终止。不能被catch到。
Exception
Exception又分为
- Checked Exception 受检查异常,没有catch 和 throws 关键字处理,就没办法通过编译
- Unchecked Excpetion 不处理也能通过编译
Checked Exception
除了RuntimeException及其子类以外,其他的Exception类及其子类都属于受检查异常 。常见的受检查异常有: IO 相关的异常、ClassNotFoundException、SQLException...。
- IOException:输入输出流异常
- FileNotFoundException:文件找不到的异常
- ClassNotFoundException:类找不到的异常
- DataFormatException:数据格式化异常
- NoSuchFieldException:没有匹配的属性异常
- NoSuchMethodException:没有匹配的方法异常
- SQLException:数据库操作异常
- TimeoutException:执行超时异常
Unchecked Exception
RuntimeException 及其子类都统称为非受检查异常,常见的有(建议记下来,日常开发中会经常用到):
- NullPointerException(空指针错误)
- IllegalArgumentException(参数错误比如方法入参类型错误)
- NumberFormatException(字符串转换为数字格式错误,IllegalArgumentException的子类)
- ArrayIndexOutOfBoundsException(数组越界错误)
- ClassCastException(类型转换错误)
- ArithmeticException(算术错误)
- SecurityException (安全错误比如权限不够)
- UnsupportedOperationException(不支持的操作错误比如重复创建同一用户)
Throwable的常用方法?
- getMessage() 异常发生的简要描述
- toString()异常发生时的详细信息
- getLocalizedMessage()异常对象的本地化信息,如果子类没有重写,与getMessage()方法返回相同
- printStackTrace() 打印异常信息
Try catch finally的使用
- try 捕获异常,后面可以跟0个或1个或多个catch,0个catch则必须有finally
- catch 处理捕获的异常
- finally 无论是否异常都会执行
需要注意的是,如果try中有return语句,则会等到finally执行完才return,如果两者都有return,try的return 会被忽视。
finally不被执行的两种情况:
- 线程死亡
- CPU不工作