JAVA的异常处理
前几天面试,遇到一些异常的问题,所以做一下总结:
一、异常的分类:
ps:来源idea,快捷键:ctrl + alt + u
异常的父类是Throwable,下面区分两个:
Ⅰ、Error,错误,通常是指程序无法处理的异常,系统会处理,一般指的是硬件异常,如:OutOfMemoryError、StackOverflowError等
Ⅱ、Exception,异常,这是我们程序中需要处理的异常,也分为两类:
① RuntimeException,运行时异常,该异常及其子类异常只有在运行程序时才会出现,也称为非检验异常。例如:ArithmeticException(算数异常)、NullPointerException(空指针异常)、IndexOutOfBoundsException(数组下标越界异常)、ClassCastException(类型强制转换异常)
② 其他Exception及其子类,属于编译时异常,这是在程序还未运行时就会出现的异常,也称之为检验异常(区别语法错误)例如:ParseException(日期转换异常)
二、异常的捕获
异常发生后,如果不进行捕获,程序就会终止。
异常的捕获分两种:
Ⅰ、在方法上声明,抛给调用该方法人去处理该异常,格式为:throws Exception 多个异常,中间用逗号隔开。
throw new Exception();表示抛出一个异常,当抛出的时一个非运行时异常的话(非RuntimeException)需要在方法上声明,交给上级处理。
拓展:
①、当方法重写时,父类声明的异常,子类需要定义异常范围小于父类,或者子类不定义异常。
②、方法的重写,子类的权限修饰符一定要比父类的更大。
Ⅱ、try-catch-finally代码块处理:
try {
/**
* 可能产生异常的代码
*/
double a = 1/0;
} catch (ArithmeticException e) {
/**
* 捕捉并处理异常,或者抛出异常
*/
e.printStackTrace();
} catch (Exception e){
/**
* 捕捉并处理异常,或者抛出异常
*/
} finally {
/**
* 异常处理后,或没有异常最终都要执行的代码
* 常用于释放资源
*/
}
拓展:
①、catch的异常可以有多个,但处理精确、范围小的异常放在上面、范围大的放在下面;
②、catch、finally同时有return,会先执行catch中return后的运算,再执行finally的中的代码块;
三、异常中常用的方法:
Ⅰ、getMessage():输出异常信息
Ⅱ、toString():给出异常的类型与性质
Ⅲ、printStackTrace():打印异常栈层次信息,指出异常在程序中的位置(此打印会调用一个新的线程去处理)
最终,介绍一下finally不执行的几种常见情况:
①、程序在try之前发生异常,并终止;
②、System.exit()强制终止;
③、程序所在线程死亡;
④、关闭CPU.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程