zoukankan      html  css  js  c++  java
  • Java异常处理机制:try...catch...的执行流程

    Java异常处理机制:try...catch...的执行流程

    在项目中遇到try...catch...语句,因为对Java异常处理机制的流程不是很清楚,导致对相关逻辑代码不理解。所以现在来总结Java异常处理机制的处理流程:

    1.异常处理的机制如下:

    1. 在方法中用 try... catch... 语句捕获并处理异常,catch 语句可以有多个,用来匹配多个不同类型的异常。
    2. 对于处理不了的异常或者要转型的异常,在方法的声明处通过 throws 声明异常,通过throw语句拋出异常,即由上层的调用方法来处理该异常。
    try {
        逻辑程序块
    } catch(ExceptionType1 e) {
        处理代码块1
    } catch (ExceptionType2 e) {
        处理代码块2
        throw(e);    // 再抛出这个"异常"
    }
    
    注:如果有异常发生,只会进入到一个catch语句块中

    2.Exception 是程序正常运行过程中可以预料到的意外情况,并且应该被开发者捕获,进行相应的处理。

    Exception 可以以两种方式出现:

    1. 一是发生在程序编译时或运行时发生异常,是被程序抛出,用户没有主动抛出异常;
    2. 二是用户主动抛出异常,使用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+ "
    ");
            }
        }
    } 

    输出结果分析:

    当有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
    

      

  • 相关阅读:
    Dialog源码分析
    PopupWindow源码分析
    Snackbar源码分析
    DialogFragment源码分析
    Toast源码深度分析
    Android 经典笔记之七:CountDownTimer解读
    [置顶] mybatis分页插件实现分页
    maven下配置ssm框架
    eclipse下集成tomcat+maven框架搭建
    maven开发ssm框架所遇到的问题:
  • 原文地址:https://www.cnblogs.com/eathertan/p/12496804.html
Copyright © 2011-2022 走看看