首先让我们搞懂两组概念:try catch finally和return

1.try catch finally

首先说try catch,

(1)try语句 ,try语句用来包围可能出现异常的代码片段. try是发现问题的语句,发现异常后会跳入到catch{}中,如下:

try{

可能出现异常的代码片段

}

(2)catch语句 ,catch语句是用来捕获try语句中出现的异常,并针对该异常解决的.catch语句块可以出现多次.

catch(Exception_Type e){

解决问题的代码片段

}

(3)finally块 ,finally出现在try语句的最后 ,finally块中的语句是必然执行的,无论try中是否出现异常.
finally{

代码片段
}

2.return

两个作用:

(1)一般的就是用在有反回值的方法中,用来返回方法指定类型的值,同时结束方法执行;

(2)也可以用在返回值为void的方法中,用来终止方法运行;return ;

3.对于以上有个基本的认识就不怕搞不懂try catch finally return运行顺序,下面以代码为例:

public static void main(String[] args) {
  String str = null;
  System.out.println(demo(str));
 }

(1)无finally时:

(1.1)

public static String demo(String str){
    try {
        System.out.println(str.charAt(1)); //构造异常
        return "1";

} catch (Exception e) {
        return "2";
    }

}

运行结果:2(无异常返回1,程序结束;出现异常时,返回2,程序结束)

(1.2)

public static String demo(String str){
    try {
        System.out.println(str.charAt(1)); 
    } catch (Exception e) {
        return "2";

}
   return "4";

}

运行结果:2(无异常返回4,程序结束;出现异常时,返回2,程序结束)

(1.3)

public static String demo(String str){
  try {
   System.out.println(str.charAt(1)); 
   return "1";
  } catch (Exception e) {
  }
  return "4";
 }

运行结果:4(无异常返回1,程序结束;出现异常时,程序跳到catch中什么也没做,接着往下运行,return "4",程序结束)

(1.4)

public static String demo(String str){
  try {
   return "1";
  } catch (Exception e) {
  }
  return "4";
 }

运行结果:1(程序自上而下运行, return "1",程序结束)

其他情况不再一一赘述。。。

(2)有finally时:

(2.1)

public static String demo(String str){

try {
        System.out.println(str.charAt(1)); 
        return "1";
    } catch (Exception e) {
        return "2";
    }
    finally{
       return "3";
    }
}

(2.2)

public static String demo(String str){
    try {
        return "1";
    } catch (Exception e) {
        return "2";
    }
    finally{
        return "3";
    }
}

注意:存在finally时,一单finally里面有return 语句,那么无论之前return过什么(是否出现异常),均被覆盖成finally里面的值(而且,finally里面一旦有return,马上返回,程序结束,不再运行以下的程序),如上两个例子均返回3:只不过(2.1)是先2后3,(2.2)是先1后3

(3)其他情况:

(3.1)

public static String demo(String str){
    try {
        System.out.println(str.charAt(1)); //异常处
        return "1";
    } catch (Exception e) {
        try {
            throw new Exception(e);
        } catch (Exception e1) {
            e1.printStackTrace();
        }
        return "2";
   }
}

运行结果:2,这是因为程序在异常处发生异常,直接跳到外层catch{}中,而在catch中尽管又进行了一次try catch,但是程序在catch{}中是自上而下可以运行到return "2";处,返回,程序结束

(3.2)

public static String demo(String str){
    try {
        System.out.println(str.charAt(1)); 
        return "1";
    } catch (Exception e) {
        try {
            throw new Exception(e);
        } catch (Exception e1) {
            e1.printStackTrace();
        }
        return "2";
  }
  finally{
      return "3";
  }
}

运行结果:3,此运行过程前面与上个例子相同,知道return"2"后面,会跳出外层catch{},运行finally{},在此中遇到return "3",返回,程序结束

以上是我的简单总结,若有错误,欢迎批评指正,转载时请注明作者及来源,谢谢

try catch finally return运行顺序的更多相关文章

  1. Java基础知识强化之IO流笔记06:有return的情况下try catch finally的执行顺序

    1. 给出结论: (1)不管有木有出现异常,finally块中代码都会执行:(2)当try和catch中有return时,finally仍然会执行:(3)finally是在return后面的表达式运算 ...

  2. 【转】C# 异常处理 throw和throw ex的区别 try catch finally的执行顺序(return)

    [转]throw和throw ex的区别 之前,在使用异常捕获语句try...catch...throw语句时,一直没太留意几种用法的区别,前几天调试程序时无意中了解到几种使用方法是有区别的,网上一查 ...

  3. 有return的情况下try catch finally的执行顺序(转)

    结论:1.不管有木有出现异常,finally块中代码都会执行:2.当try和catch中有return时,finally仍然会执行:3.finally是在return后面的表达式运算后执行的(此时并没 ...

  4. try catch finally的执行顺序(有return的情况下)

    结论:1.不管有木有出现异常,finally块中代码都会执行:2.当try和catch中有return时,finally仍然会执行:3.finally是在return后面的表达式运算后执行的(此时并没 ...

  5. 有return的情况下try catch finally的执行顺序

    结论:1.不管有木有出现异常,finally块中代码都会执行:2.当try和catch中有return时,finally仍然会执行:3.finally是在return后面的表达式运算后执行的(此时并没 ...

  6. 有return的情况下try catch finally的执行顺序(最有说服力的总结)

    结论:1.不管有木有出现异常,finally块中代码都会执行:2.当try和catch中有return时,finally仍然会执行:3.finally是在return后面的表达式运算后执行的(此时并没 ...

  7. 【Java疑难杂症】有return的情况下try catch finally的执行顺序

    有这样一个问题,异常处理大家应该都不陌生,类似如下代码: public class Test { public static void main(String[] args) { int d1 = 0 ...

  8. 有return的情况下try catch finally的执行顺序(转)

    结论:1.不管有没有出现异常,finally块中代码都会执行:2.当try和catch中有return时,finally仍然会执行:3.finally是在return后面的表达式运算后执行的(此时并没 ...

  9. [转]有return的情况下try catch finally的执行顺序

    结论: 1.不管有没有出现异常,finally块中代码都会执行: 2.当try和catch中有return时,finally仍然会执行: 3.finally是在return后面的表达式运算后执行的(此 ...

随机推荐

  1. Spring资源加载基础ClassLoader

    1 ClassLoader工作机制 1.1 ClassLoader作用 寻找类字节码文件并构造出类在JVM内部表示的组件.负责运行时查找和装入Class字节码文件 1.2 装载步骤 1.2.1 装载 ...

  2. 【Android实验】 UI设计-ListView

    目录 实验目的 实验要求 实验内容 实现效果 实验代码 实验总结 实验目的 学习使用ListView 学习使用menu 实验要求 实现一个列表,其中显示班级学号姓名,提供添加功能,如需要删去某一项,长 ...

  3. BZOJ 1009: [HNOI2008]GT考试(kmp+dp+矩阵优化)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1009 题意: 思路:真的是好题啊! 对于这种题目,很有可能就是dp,$f[i][j]$表示分析到第 ...

  4. yunw

  5. Mui --- 弹出菜单

    mui框架内置了弹出菜单插件,弹出菜单显示内容不限,但必须包裹在一个含.mui-popover类的div中,如下即为一个弹出菜单内容: <div id="popover" c ...

  6. tmp for cassandra batch delete

    now i have no time to verify this bash script. it is hard for me to delete each data via primary key ...

  7. PHP概率,抽奖

    随机数,游标卡尺. 一个大饼,随机到哪个坑里,就中哪个奖. 大转盘! 公平公正! // 获取锦鲤 public function getGoldPig() { $pig_gift_bag = [ [ ...

  8. S4 对象系统

    上一节中,我们介绍了 S3 系统.与大多数其他编程语言的面向对象系统不同,与那些类被定义为固定结构,且随着程序编译有确定的方法分派的系统相比,S3 系统显得非常不严谨.当我们定义一个 S3 类时,几乎 ...

  9. Xcode集成POD教程

    http://www.cocoachina.com/ios/20150410/11526.html COCOAPODS的网站上有很多非常好用的资源,这里来说一下如何把POD集成到我们的Xcode项目中 ...

  10. English trip -- VC(情景课)1 B Countries

    Vocabulary focus 核心词汇 Vo ca bu la ry   fo cus [və(ʊ)'kæbjʊlərɪ]      ['fəʊkəs] Listen and repeat  听并 ...