异常处理机制中的return关键字

Java中,执行try-catch-finally语句需要注意:

第一:return语句并不是函数的最终出口,如果有finally语句,这在return之后还会执行finally(return的值会暂存在栈里面,等待finally执行后再返回)

第二:finally里面不建议放return语句,根据需要,return语句可以放在try和catch里面和函数的最后。可行的做法有四种:   

  1)return语句只在方法最后出现一次。   

  2)return语句仅在try和catch里面都出现。   

  3)return语句仅在try和方法最后都出现。   

  4)return语句仅在catch和方法的最后都出现。

注意,除此之外的其他做法都是不可行的,编译器会报错。

  (1)如果程序运行到try成功时可以返回结果,则采用方法2。

  (2)如果程序运行到catch时(即中途出错时)无需再继续执行后面的代码了,则采取方法4。

  (3)如果程序运行到try或catch时还需要继续执行后面的代码,则采取方法1。

package cn.javaoppday01;

public class Text {

    public static void main(String[] args) {
           System.out.println(getResult());
    }
    public static int getResult(){
        int a =100;
        try{
              a++;   //此行执行的是try 原值为100,执行try的时候为101
            return a;
        }finally{
            a++;
        }
    }

    }结果为101
package cn.day006;

public class Test2 {
     public static void main(String[] args) {
            try{
            System.out.println(getResult());
            }catch(Exception e){
                e.printStackTrace();
                System.out.println("截获异常catch");
            }finally{
                System.out.println("异常处理finally");
            }
        }

        @SuppressWarnings("finally")
        public static int getResult() throws Exception{
            int a =100;
            try{
                a=a+10;
                throw new RuntimeException();
            }catch(Exception e){
                System.out.println("截获异常并重新抛出异常");
                throw new Exception();
            }finally{
                return a;
            }
        }
}结果为:截获异常并重新抛出异常 110 异常处理finally

即使在try块,catch块中存在return语句,finally块中的语句也会执行,finally 块中的语句不执行的唯一情况是,在异常处理代码中执行System.exit(1);

在try--catch -finally 中 如果有return关键字的话  执行顺序如下:

try --catch--finally -return

原文地址:https://www.cnblogs.com/3020815dzq/p/8527669.html

时间: 2024-10-10 17:52:08

异常处理机制中的return关键字的相关文章

Nginx return 关键字配置小技巧

Nginx的return关键字属于HttpRewriteModule模块: 语法:return http状态码 默认值:无 上下文:server,location,if 该指令将结束执行直接返回http状态码到客户端. 支持的http状态码:200, 204, 400, 402-406, 408, 410, 411, 413, 416 , 500-504,还有非标准的444状态码. 使用方法: #不符合规则的返回403禁止访问 location /download/ {     rewrite 

return 关键字的作用

注意: 如果一个函数的返回值类型是具体的数据类型,那么该函数就必须要保证在任意情况下都保证有返回值.(除了返回值类型是void以外) return 关键字的作用: 1. 返回数据给函数的调用者. 2. 函数一旦执行到了return关键字,那么该函数马上结束. (能结束一个函数) 注意:一个函数的返回值类型 是void,那么也可以出现return关键字,但是return关键字的后面不能有数据. break关键字与return关键字的区别: 1.break关键字是结束一个循环. 2. return关

JavaOO视频-09【break、continue、return关键字应用】

转载标明,http://www.gxabase.com 视频内容:此节视频主要介绍Java基础程序设计中的break.continue.return关键字如何应用.视频内容详细,大家在学习中可以很好的参考一下.

JAVA- continue与break与return关键字

continue与break关键字 for(int i=0;i<10;i++){ if(i%2==0){ continue; //跳过当前循环执行下一次循环 } System.out.println(i); } for(int i=0;i<10;i++){ if(i==3){break;}//跳出当前循环 System.out.println(i); } 跳出指定的for循环体,和goto很像 K:for(int i=0;i<3;i++){//给这个for循环体取一个名字为K for(i

return关键字使用案例

我们在PHP程序开发中经常使用retrun关键字来终止函数的执行.当一个函数执行结束,要么是因为所有 的命令都执行完了,要么就是因为使用了关键字return.当然了,这不是我们使用return的唯一原因, 它还可以从函数中返回一个值,这也是我们在PHP程序开发中经常使用的方法,实际案例如下: <?php function larger($x, $y){      if ((! isset ($x)) || (! isset ($y))){          echo "This funct

“全栈2019”Java异常第九章:throws关键字详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异常第九章:throws关键字详解 下一章 "全栈2019"Java异常第十章:throw与throws区别详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Ja

js return关键字

js return关键字: 加减法demo: 总结return关键字的作用: js函数中return 关键字的作用和后端return的作用几乎一致: 1.返回函数执行的结果 2.结束函数的运行 3.组织默认行为 原文地址:https://www.cnblogs.com/yingxiongguixing/p/11650794.html

Java中处理异常中return关键字

1. package cn.day006; public class Test { public static void main(String[] args) { System.out.println(getResult()); } @SuppressWarnings("finally") public static int getResult(){ int a =100; try{ return a+1; //注意,java的基础数据类型是值传递,这里的返回值已经和上面的a没有关系

Asp.Net请求处理机制中IsApiRuntime解析

今天看了web请求的生命周期,看完了还有些不懂,就是用反编译工具,查看封装内库的内部实现. 从计算机内部查到web.dll,使用反编译工具打开 打开后 public int ProcessRequest(IntPtr ecb, int iWRType) { IntPtr intPtr = IntPtr.Zero; if (iWRType == 2) { intPtr = ecb; ecb = UnsafeNativeMethods.GetEcb(intPtr); } //首先创建ISAPIWor