`

关于java中的try-catch-finally语句和return[转]

    博客分类:
  • java
 
阅读更多

第一: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。(见下面的例子test0_1,在那个例子中,方法2和4都是可行的,但是推荐方法2?)
(2)如果程序运行到catch时(即中途出错时)无需再继续执行后面的代码了,则采取方法4;(见下面例子中的test0,在那个特殊的例子中,只能采取方法4)
(3)如果程序运行到try或catch时还需要继续执行后面的代码,则采取方法1(见下面的例子test0_2,该例子只能采用方法1)。
 
下面是测试代码:
 
[java] 
public class Test { 
 
    public static void main(String[] args) { 
        System.out.println("=============test1=================="); 
        System.out.println(test1()); 
        System.out.println("==============================="); 
 
        System.out.println("=============test1_1=================="); 
        System.out.println(test1_1()); 
        System.out.println("==============================="); 
 
        System.out.println("\n============test2==================="); 
        System.out.println(test2()); 
        System.out.println("==============================="); 
 
        System.out.println("\n============test2_1==================="); 
        System.out.println(test2_1()); 
        System.out.println("==============================="); 
 
        System.out.println("\n============test3==================="); 
        System.out.println(test3()); 
        System.out.println("==============================="); 
 
        System.out.println("\n============test3_1==================="); 
        System.out.println(test3_1()); 
        System.out.println("==============================="); 
    } 
 
    public static String test0() { 
        String a; 
        int b; 
        try{ 
            b = 8/0; 
        }catch(Exception e){ 
            return null; 
        } 
        a = String.valueOf(b); 
        return a+b; 
    } 
   
    public static String test0_1() { 
        String a; 
        int b; 
        try{ 
            b = 8/0; 
            a = String.valueOf(b); 
            return a+b; 
        }catch(Exception e){ 
            return null; 
        } 
        //return a+b; 
    } 
     
    public static String test0_2() { 
        String a; 
        int b=0; 
        try{ 
            b = 8/0; 
        }catch(Exception e){ 
        } 
        a = String.valueOf(b); 
        return a; 
    } 
     
    public static String test1() { 
        String a = "in try"; 
        int n = -1; 
        try{ 
            return a+n; //先执行这个,再执行finally 
        } catch ( Exception e ) { 
 
        } finally { 
            //对String和int的更改均无效 
            a = "in finally"; 
            n = 123; 
            System.out.println("do finally"); 
        } 
        return a; //不会执行 
    }  //总结出一点:return语句并不是函数的最终出口,如果有finally语句,这在return之后还会执行finally 
 
    public static String test1_1() { 
        String a = "in try"; 
 
        try{ 
            return a; 
        } catch ( Exception e ) { 
 
        } finally { //从eclpise报警告可看出,finally里面不建议有return语句 
            a = "in finally"; 
            System.out.println("do finally"); 
            return a; //注释掉这句,eclipse将不再警告 
        } 
    } 
 
    public static int test2() { 
        int a = 1; 
 
        try{ 
            return a; 
        } catch ( Exception e ) { 
 
        } finally { 
            a = 2; 
            System.out.println("do finally"); 
        } 
 
        return a; 
    } //很显然,finally里面更改无效,返回的是a=1 
 
    public static int test2_1() { 
        int a = 1; 
 
        try{ 
            return a; 
        } catch ( Exception e ) { 
 
        } finally { 
            a = 2; 
            System.out.println("do finally"); 
            return a; 
        } 
    } //很显然,a取finally里面的值,a=2 
 
    //Helper类,将整数转换成字符串 
    static class Helper { 
        int a; 
 
        public String toString() { 
            return String.valueOf(a); 
        } 
    } 
     
    public static Helper test3() { 
        Helper h = new Helper(); 
        h.a = 1; 
 
        try{ 
            return h; 
        } catch ( Exception e ) { 
 
        } finally { 
            h.a = 2; //对h.a的更改起作用!! 
                    //因为在try里面返回的是一个句柄,它指向的对象的内容 是可以改变的 
            System.out.println("do finally"); 
        } 
         
        return h; //这个不会被执行 
    } 
 
    public static Helper test3_1() { 
        Helper h = new Helper(); 
        h.a = 1; 
 
        try{ 
            return h; 
        } catch ( Exception e ) { 
 
        } finally { 
            h.a = 2; //返回a=2,这个不用说了 
            System.out.println("do finally"); 
            return h; 
        } 
    } 
 
 
    /**
     * 总结:
     * return语句,finally里面不建议放return语句,根据需要,可以放在try和catch里面
     * 
     */ 
     

分享到:
评论

相关推荐

    关于Java中的try-catch-finally语句和return

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

    谈谈Java中try-catch-finally中的return语句

    我们知道return语句用在某一个方法中,一是用于返回函数的执行结果,二是用于返回值为void类型的函数中,仅仅是一个return语句(return ;),此时用于结束方法的执行,也即此return后的语句将不会被执行,当然,这种...

    try~catch~finally中关于return的问题

    在Java的异常机制中,如果finally中含有return语句,则try和catch中的return语句将会被JVM忽视

    实验五 Java异常处理实验.docx

    在 Java 中,异常可以通过 throw 语句抛出,catch 语句可以捕获异常。抛出异常是指程序中出现错误时,抛出异常对象,以便于捕获和处理异常。捕获异常是指使用 catch 语句捕获抛出的异常对象,并进行相应的处理。 ...

    josonle#Coding-Now#finally语句如何执行1

    - 无论try是否发生异常,finally语句都会执行- 如果try/catch中包含控制转移语句(return、continue、break),finally

    Java中finally块执行与return关系深度剖析

    Java finally语句到底是在return之前还是之后执行?Java finally执行深度剖析,具体看这篇博文:http://blog.csdn.net/lanxuezaipiao/article/details/16922895,这是里面相关的源码,欢迎大家下载使用。

    day26作业1

    3. 异常处理:Java语言提供了多种异常处理机制,例如使用try-catch语句捕捉异常,使用finally语句释放资源。 day26作业1涵盖了Java语言的基础知识、控制结构、函数、面向对象编程和异常处理等多个方面,旨在帮助...

    2021年JAVA面向对象程序设计练习题库B.doc

    在 Java 中,我们可以使用 try-catch 语句来捕获和处理异常。 Java 中的 finally 语句是指无论是否出现异常都会执行的语句。在 Java 中,我们可以使用 finally 语句来释放资源。 Java 中的 break 语句是指跳出...

    java大厂面经、直击BAT

    finally 一定会被执行,如果 finally 里有 return 语句,则覆盖 try/catch 里的 return , 比较爱考的是 finally 里没有 return 语句,这时虽然 finally 里对 return 的值进行了修改,但 return 的值并不改变这种...

    Java常用英语单词.pdf

    Java是一种广泛应用于软件开发的编程语言,而英语单词是Java编程中不可或缺的一部分。学习Java编程的开发者需要了解一些基本的英语单词,才能更好地理解和应用Java技术。下面是Java常用英语单词的总结,涵盖了Java...

    java语言基本语法.docx

    Java语言中有try-catch语句,用于捕获和处理异常。try语句块中可能会抛出异常,catch语句块中可以捕获和处理异常。 标识符 Java语言中,标识符是给变量、常量、方法、类、接口命名的符号。标识符的命名规则是: *...

    2022国开形考任务-Java语言程序设计20.docx

    在Java语言中,try语句块用于捕获异常,catch语句块用于处理异常,而finally语句块用于释放资源。try语句块是异常发生的位置。catch语句块可以单独和finally语句块一起使用。 对于异常的说法正确的是,抛出异常是...

    Java面试宝典-经典

    38、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 25 39、下面的程序代码输出的结果是多少? 25 40、final, finally, finalize的区别。 27 ...

    C#-基础知识.ppt

    C#基础知识 C#是一种现代、高效、可靠的面向对象...C#语言支持异常处理机制,包括try-catch语句和finally语句,能够捕获和处理程序中的异常。 C#语言是一个功能强大、灵活的编程语言,能够满足大多数应用程序的需求。

    java软件开发求职试题集合.pdf

    try-catch-finally语句的执行顺序是:先执行try块,如果出现异常,则执行catch块,最后执行finally块。finally块总是会执行,即使try块或catch块中出现了return语句。 2. mvc 的各个部分都有那些技术来实现?如何...

    计算机核心java编程笔记

    Java 语言中的修饰符可以用于控制变量和方法的访问权限,例如: * public * protected * private * final * void * static * strict * abstract * transient * synchronized * volatile * native 六、Java 动作 ...

    Java软件开发工程师笔试题.pdf

    在 catch 代码段中可以使用 return 语句来返回到异常抛出点。可以把 catch 到的异常对象再次抛出,使上层 try-catch 结构继续处理该异常事件。 4. 访问控制符:private 访问控制符修饰的成员变量只能被该类自身所...

    Java冲刺试题

    在 try 语句中如果有 return 语句,finally 语句块总是会被执行的,且在 return 语句之前执行。 七、List<Short> 和 short 的关系 short 是基本类型,不能直接调用 add 方法,需要将 short 转换成 Short 对象。 ...

    java代码审查表.pdf

    Java代码审查表中关于函数和变量使用规则的重要性激活级别检查项有: * 函数是否已经有文档注释?(功能、输入、返回及其他可选)(重要50) * 是否每个函数执行单个功能并与其命名相符?(重要20) * 变量是否都...

    学习Java软件开发工程师笔试题.pdf

    catch代码段中可以使用return语句来返回到异常抛出点。可以把catch到的异常对象再次抛出,使上层try-catch结构继续处理该异常事件。 4. 访问控制符private private访问控制符修饰的成员变量只能被该类自身所访问和...

Global site tag (gtag.js) - Google Analytics