zoukankan      html  css  js  c++  java
  • 0016 Java学习笔记-异常-如果try-catch-finally中都存在return语句会怎样?

    上午在搜索"System.runFinalization"的时候,搜到 http://www.cnblogs.com/Skyar/p/5962253.html ,其中有关于try-catch-finally的部分,特整理如下

    先看下面这个方法的返回值

    public static String test(){
        	String x="";
        	String y=null;
        	try{
        		x=y.replace("A","B");
        		return x+"C";
        	}catch(Exception e){
        		x="D";
        		return x+="EFG";
        	}finally{
        		x=x+"H";
        		return x; //返回DEFGH
        	}
        }
    

    执行过程

    1. 执行try块:执行中抛出一个"NullPointerException",被catch块捕获;return语句得不到执行
    2. 执行catch块:x="D"。此时x=D
    3. 执行catch块:x+="EFG"。此时x=DEFG,return操作挂起
    4. 执行finally块:x=x+"H"。此时x=DEFGH
    5. 执行finally块:return x。将x=DEFGH返回给调用者
    6. 该方法结束

    执行机制

    • 如果try中没有异常抛出
      • 执行到try块时,如果return后面跟的是个语句,把该语句运算完,暂时放下不return;
      • 寻找并执行finally语句块,如果finally中有return语句,就执行并return,方法结束;如果没有return语句,就返回执行try中的return,方法结束
    • 如果try中抛出异常
      • try块中抛出异常的这个语句后面的语句都不会执行,后面的return执行不到
      • catch块捕获后,执行catch块,到return语句时,运算完return后面的语句,暂时放下不return
      • 寻找并执行finally语句块,遇到return语句,运算并return,方法结束;如果没有return语句,就返回执行catch的return,方法结束

    参考资料:http://www.cnblogs.com/Skyar/p/5962253.html

  • 相关阅读:
    Css进阶
    Css布局
    遇到的小问题
    MySQL 8.017连接Navicat中出现的问题
    ConcurrentHashMap图文源码解析
    HashMap图文源码解析
    接口和抽象类
    dependencies 和 devDependencies
    2020.7.7第二天
    2020.7.6第一天
  • 原文地址:https://www.cnblogs.com/sonng/p/6065726.html
Copyright © 2011-2022 走看看