Java_异常
-
异常体系图
-
常见异常
- NullPointerException 空指针异常
- ArithmeticException 数学运算异常
- ArrayIndexOutOfBoundsException 数组下标越界异常
- ClassCastException 类型转换异常
- NumberFormatException 数字格式不正确异常
-
异常处理(默认 throw )
-
try-catch-finally
-
throw
- 把异常抛给调用函数,调用函数通过try—catch 处理,或者再一次抛给调用函数。JVM是最顶层处理者直接输出异常信息然后退出程序
-
// IDEA快捷键 ctrl + alt + T
try{
String name = "异常";
int num = Integer.parseInt(name);//name 不能转换成数字类型 (NumberFormatException 数字格式不正确异常)
}
catch ( Exception e){ //Exception [ɪkˈsepʃn]
System.out.println("异常信息" + e.getMessage());
}finally{
//无论是否发生异常都进行finally代码块中
//所以,通常将把资源的释放放到finally里
System.out.println("代码运行");
}
- 注意事项
- 发生异常之后的代码不会继续执行之后的代码,而是直接执行catch代码块中的代码,然后执行catch代码块之后的代码
- 如果没有发生异常,则顺序执行try代码块中的代码,不会执行catch代码块中代码
- 如果有希望不管异常是否发生都要进行的处理,把处理代码放到finally代码块中
- catch 可以有多个,捕获不同的异常,进行不同的处理
try{
}
catch(NullPointerException e){
}
catch(ArithmeticException e){
}
catch(Exception e){
//放在最后,因为 Exception 会捕获所有异常(父类)
}finally{
}
- try-finally
- 不管发不发生异常都会进行finally代码块里的处理,无论代码块是否return,都要先执行finally代码块的代码
public class ThrowException {
public static void main(String[] args) {
try {
ReturnExceptionDemo.methodA();
} catch (Exception e) {
System.out.println(e.getMessage());
}
ReturnExceptionDemo.methodB();
}
}
class ReturnExceptionDemo {
static void methodA() {
try {
System.out.println("进入方法A");
throw new RuntimeException("制造异常");
} finally {
System.out.println("用A方法的finally");
}
}
static void methodB() {
try {
System.out.println("进入方法B");
return;
} finally {
System.out.println("调用B方法的finally");
}
}
}
执行结果
无论 return 是否有变量,都会先执行finnaly代码块中的代码
i = 1;
try{
i++;// i = 2
}
catch(){
return ++i; // return 3
}
finally{
++i;
System.out.println("i = " + i); //i = 4
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~