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
    

      

  • 相关阅读:
    UVA 1025 A Spy in the Metro DP水题
    ZOJ 3814 Sawtooth Puzzle BFS
    ZOJ 3816 Generalized Palindromic Number
    UVA 10859 Placing Lampposts 树形DP
    UVA 11825 Hackers' Crackdown 状压DP
    POJ 2887 Big String 线段树 离线处理
    POJ 1635 Subway tree systems Hash法判断有根树是否同构
    BZOJ 3110 k大数查询 & 树套树
    sdoi 2009 & 状态压缩
    来自于2016.2.24的flag
  • 原文地址:https://www.cnblogs.com/eathertan/p/12496804.html
Copyright © 2011-2022 走看看