Java异常处理机制try catch流程详解
作者:谭宝贵 发布时间:2022-09-23 08:51:09
在项目中遇到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
来源:https://www.cnblogs.com/eathertan/p/12496804.html


猜你喜欢
- 本文主要介绍了C# 枚举Color并展示各种颜色效果,分享给大家,具体如下:本方法枚举Color以展示各颜色效果,方便为控件选择合适的颜色。
- /* 系统名:SaleManage* 模块名:SortPags* 模块说明:排序分页类(传入DataTable,及相关信息,然后分页,并排序
- XuLIeHua类库using System;using System.Collections; using System.Co
- 1.打开官网稍微学习一下,了解一下spring cloud是个什么东西,大概有哪些组件等https://spring.io/projects
- 这篇文章主要介绍了SpringBoot项目没有把依赖的jar包一起打包的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一
- 如下所示:using System;using System.Collections.Generic;using System.Diagno
- 当用户从网络上读取微薄的时候,如果一下子全部加载用户未读的微薄这将耗费比较长的时间,造成不好的用户体验,同时一屏的内容也不足以显示如此多的内
- 这篇文章主要介绍了SpringBoot 使用Mybatis分页插件实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参
- Java-JDK * (AOP)使用及实现原理分析第一章:代理的介绍介绍:我们需要掌握的程度 * (理解) 基于反射机制掌握的程度:1.
- 本文实例讲述了C#中参数个数可变的方法。分享给大家供大家参考。具体方法如下:要实现C#中参数个数可变关键是使用params关键字。并且,可变
- 1.以ApplocationContext上下文单例模式装配bean为例,深入探讨bean的生命周期:(1).生命周期图:(2).具体事例:
- 一、同步问题提出线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。例如:两个线程ThreadA、ThreadB都操作同一个对
- 如何将Object类型转换为int类型Object object = null;try{ Integer.pars
- 可以静态绑定数据源,这样就自动为DataGridView控件添加 相应的行。假如需要动态为DataGridView控件添加新行,方法有很多种
- 栅栏类似闭锁,但是它们是有区别的.1.闭锁用来等待事件,而栅栏用于等待其他线程.什么意思呢?就是说闭锁用来等待的事件就是countDown事
- 项目中需要webview重定向,但是由于一个webveiw里面有许多加载操作,因此在调用webview。goback()方法时,往往达不到我
- 工厂接口定义/// <summary> /// 工厂接口定义 &nbs
- 前言本文介绍在spring mvc中非常重要的注解@ModelAttribute.这个注解可以用在方法参数上,或是方法声明上。这个注解的主要
- Eclipse Che被Eclipse官方称为下一代IDE,作为老牌的IDE,被其寄予厚望的Eclipse Che到底有什么特点,在这篇文章
- 本文以实例形式详细讲述了Java的反射机制,是Java程序设计中重要的技巧。分享给大家供大家参考。具体分析如下:首先,Reflection是