Java异常处理机制try catch流程详解
在项目中遇到try...catch...语句,因为对Java异常处理机制的流程不是很清楚,导致对相关逻辑代码不理解。所以现在来总结Java异常处理机制的处理流程:
1.异常处理的机制如下:在方法中用 try... catch... 语句捕获并处理异常,catch 语句可以有多个,用来匹配多个不同类型的异常。对于处理不了的异常或者要转型的异常,在方法的声明处通过 throws 声明异常,通过throw语句拋出异常,即由上层的调用方法来处理该异常。
try { 逻辑程序块 } catch(ExceptionType1 e) { 处理代码块1 } catch (ExceptionType2 e) { 处理代码块2 throw(e); // 再抛出这个"异常" }
2.Exception 是程序正常运行过程中可以预料到的意外情况,并且应该被开发者捕获,进行相应的处理。
Exception 可以以两种方式出现:
一是发生在程序编译时或运行时发生异常,是被程序抛出,用户没有主动抛出异常;二是用户主动抛出异常,使用throw关键字主动抛出异常。该异常可以是业务逻辑的异常。
try { // 可能发生异常的语句 } catch(ExceptionType e) { // 处理异常语句 }
3.执行流程
try语句块中发生了异常
如果try语句块中发生了异常,那么程序就会把对应的异常对象抛出,然后catch语句就会捕获该异常并且处理。
注意:如在try语句块的第二句语句发生异常,那么在第二句以后的语句都不会执行了,转到catch语句块中开始执行。处理完catch语句块的内容,就会执行catch语句块之后的内容
try语句块中没有发生异常
如果try语句块中没有发生异常,那么try语句块中的内容会由上到下依次执行,然后catch语句块会全部被跳过,接下来执行catch语句块之后的内容。
举个栗子:
public class ExceptionTest { public static void main(String[] args) { for (int i = 0; i < 3; i++) { String message = ""; int a = 0; try{ if (i == 1){ throw new Exception("错误"); } message = "正确"; a= 123; }catch (Exception e){ message = e.getMessage(); } System.out.println( "i 等于" + i); System.out.println(message ); System.out.println("a = " + a+ "\n"); } } }
输出结果分析:
当有i = 2时,用户主动抛出异常,可以看到为 message= "正确";a =123;的赋值语句没有执行, 进入到catch语句块中,然后再执行catch语句块以后的内容message = e.getMessage(); 这里message = "错误",因为throw new Exception("错误"); 在抛出异常时赋值了message为"错误";
message = "错误"
a = 0
输出结果
i 等于0
正确
a = 123
i 等于1
正确
a = 123
i 等于2
错误
a = 0
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
Spring Boot @Conditional注解用法示例介绍
这篇文章主要给大家介绍了关于Spring Boot @Conditional注解用法的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧2019-11-11使用FeignClient进行微服务交互方式(微服务接口互相调用)
这篇文章主要介绍了使用FeignClient进行微服务交互方式(微服务接口互相调用),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-03-03MyBatisPlus-QueryWrapper多条件查询及修改方式
这篇文章主要介绍了MyBatisPlus-QueryWrapper多条件查询及修改方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-06-06Quartz定时任务管理方式(动态添加、停止、恢复、删除定时任务)
这篇文章主要介绍了Quartz定时任务管理方式(动态添加、停止、恢复、删除定时任务),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-12-12
最新评论