首页 > 编程语言 >Java异常处理流程

Java异常处理流程

时间:2023-04-05 23:34:11浏览次数:44  
标签:语句 Java 流程 System finally catch 异常 out

Java异常处理流程

java中处理异常的代码块构成一般如下

class TestException{
    String testEx(){
        try {
           System.out.println("捕获异常");
        }catch (java.lang.Exception E){
           System.out.println("处理发生异常");
        }finally {
            System.out.println("无论异常是否发生必定执行");
        }
        return "异常区结束";
    }
}

代码中的finally代码块主要用于关闭必须要关闭的资源。比如在处理I/O的时候,一但发生异常。如果I/O流无法被关闭就会长时间占用系统资源。

异常处理的基本流程是,程序的控制权从发生异常的地方转移到处理异常的地方,而finally代码块无论是否发生异常都必须执行,那么就会出现一个问题,catch代码块中出现了return语句,finally语句是否还会执行?fianlly语句块中有return代码的执行流程又是什么样?

问题1:返回语句在catch中,finally中没有返回语句的执行流程分析

修改上述代码,如下:

class TestException{
    String testEx(){
        try {
            int i= 4/0; //模拟异常发生
           System.out.println("捕获异常");
        }catch (java.lang.Exception E){
           System.out.println("处理发生异常");
           return "catch";
        }finally {
            System.out.println("无论异常是否发生必定执行");
        }
        return "异常区结束";
    }
}

执行方法后的测试结果:
image
可以看到,在catch语句块中加了return语句后,finally语句块依旧会执行。并且在执行完毕finally语句块后,在从catch语句块中进行函数值的返回。

问题2:返回语句在catch中,finally中有返回语句的执行流程分析

修改上述代码如下:

class TestException{
    String testEx(){
        try {
            int i= 4/0; //模拟异常发生
           System.out.println("捕获异常");
        }catch (java.lang.Exception E){
           System.out.println("处理发生异常");
           return "catch";
        }finally {
            System.out.println("无论异常是否发生必定执行");
            return "finally";
        }
    }
}

测试执行结果:
image
从测试结果得出,此时的异常流程处理,是先在catch中处理异常,遇到return语句后,程序控制权跳转到finally语句代码块中,如果finally代码块中有return语句,则程序直接return到函数调用位置。

问题23:catch中,finally中都没有返回语句的执行流程分析

修改上述代码如下:

class TestException{
    String testEx(){
        try {
            int i= 4/0; //模拟异常发生
           System.out.println("捕获异常");
        }catch (java.lang.Exception E){
           System.out.println("处理发生异常");

        }finally {
            System.out.println("无论异常是否发生必定执行");

        }
    return "代码结束";
    }
}

程序运行结果分析:
image
如果异常处理中没有函数返回语句,那么会直接执行异常处理块外面的代码。

标签:语句,Java,流程,System,finally,catch,异常,out
From: https://www.cnblogs.com/aoCat/p/17291300.html

相关文章

  • 方法定义,Date和JSON对象,及JavaScript式面向对象编程
    一.方法1.方法的定义 方法就是把函数放在对象里面,对象有两个东西:属性和方法通过对象名.方法名()使用a.第一种方法定义<script>varsetFun={name:"maming",birth:2002,//方法:被包含在对象之中age:function(){varnow=ne......
  • 链表反转-JavaDG实现
    对于链表的反转,用常规的迭代法,是很简单的,使用两个指针;对于用递归法,则是很经典题了,我就觉得对于递归方法和常用的迭代法,大家最好都熟悉掌握,不要刻意的去避免哪一点;1•链表反转2○常规的迭代实现:3publicListNodereverseList(ListNodehea......
  • Java笔记(10) GUI->布局
    这里介绍3种布局:FlowLayout流式布局BorderLayout边界布局GridLayout网格布局FlowLayout/*MyFrame定义见Java笔记9,这里添加了事件监听方法*/publicclassTestFlowLayout{publicstaticvoidmain(String[]args){MyFramemyFrame=newMyFram......
  • java文件上传审计
    审计点简述  审计文件名-审计后缀名-审计文件内容-审计点--文件名称1.文件名存在目录穿越漏洞漏洞原因:开发者直接将用户输入的文件名拼接在路径上进行查找漏洞修复:开发者直接指定一个路径,不信任用户的路径(添加一个时间戳)文件名直接拼接产生漏洞:/ab/c+file_name--......
  • SpringBoot启动流程
    启动类@SpringBootApplicationpublicclassApp{publicstaticvoidmain(String[]args){ SpringApplication.run(App.class,args);}}@SpringBootApplication对于一个SpringBoot程序的启动首先需要一个加了@SpringBootApplication注解的启动类。@Spr......
  • Java Stream学习笔记(一)
    JavaStream学习笔记Stream是Java8API添加的一个新的抽象,称为流Stream,以一种声明性方式处理数据集合(侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式)。一、特点1、代码简洁:函数式编程写出的代码简洁且意图明确,使用stream接口让你从此告别for循环。2、多核友好......
  • 流程控制语句
    一、三种流程控制语句顺序结构、选择结构、循环结构二、顺序结构没什么好说的,程序一行一行的,从上到下执行就是顺序结构三、选择结构  1.if()条件判断  if(条件1){满足条件1执行}elseif(条件2){不满足条件1满足条件2执行}else{条件1,2都不满足执行}  2.switch()......
  • Failed to start bean 'documentationPluginsBootstrapper';nested exception is jav
    报错:Failedtostartbean‘documentationPluginsBootstrapper’;nestedexceptionisjava.lang.NullPointerException错误项目版本:springboot最新版本<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-sta......
  • Java进制转换
    publicstaticvoidmain(String[]args){ Scannerscan=newScanner(System.in); Stringrs="2022"; System.out.println(Integer.parseInt(rs,9)); scan.close();}上述代码实现的功能:将2022的9进制数转化为10进制......
  • JavaScript基础知识之——Location 对象详解
    属性描述location.hash设置或取得URL中的锚location.host设置或取得URL中主机(包括端口号)location.hostname设置或取得URL中的主机名location.href设置或取得完整URL(页面重定向应用)location.pathname设置或取得URL中的路径location.port设置或取得URL中的端口号location.......