zoukankan      html  css  js  c++  java
  • try、catch、finally与return

    1 try catch finally语句基础知识

    1. finally一定会被执行。
    2. try块发生异常才会执行catch块。
    3. 如果finally块中抛出异常,则整个try、catch、finally块中抛出异常。

    2 try catch finally语句与return语句

    1、finally块一定会被执行。即使已经执行了return语句。

    例:

    public class Test{
        public static String func(){
            Integer i=0;
            try{
                System.out.println("执行try语句块");//1
                return i.toString();//2
            }finally{
                System.out.println("开始执行finally语句块,i的值为:"+i);//3
                i++;//4
                System.out.println("结束执行finally语句块,i的值为:"+i);//5
            }
        }
    
        public static void main(String[] args) {
            System.out.println("开始执行main");//0
            System.out.println("执行func的结果为:"+func());//5
            System.out.println("结束执行main");//6
        }
    }

    输出:

    开始执行main
    执行try语句块
    开始执行finally语句块,i的值为:0
    结束执行finally语句块,i的值为:1
    执行func的结果为:0
    结束执行main

    从该例可看出,外层代码先获取方法的返回值,等待方法内部finally语句执行结束后,外层方法继续执行。即try、catch、finally语句中,执行return后,对当前返回的值做任何的修改,都不影响已经return的返回值。

    2、try块中有return语句,catch块中也必须有return语句。否则无法通过编译。

    return语句在try-catch-finally块之前。显然这会提示异常,提示去除try{}catch(){}finally{}块。

    由于return一般都处于代码块执行的最后。所以若try块抛出异常,则return语句肯定还未执行。异常被catch捕获,catch必须完成try没有完成的return。

    3、如果finally块中有return 语句,则返回try或catch中的返回语句忽略。

    public class TryCatchFinally {

        

        static int method(){

            try{

                return 0;

            }catch(Exception e){

                return 1;

            }finally{

                System.out.println("finally{}");

                return 2;

            }

        }

        

        public static void main(String[] args) {

            int i = method();

            System.out.println(i);

        }

    }

    输出:

    finally{}
    
    2

    finally中有return语句,编译器会提示警告。

    3 使用try、catch、finally语句块中需要注意

    1、尽量在try或者catch中使用return语句。通过finally块中达到对try或者catch返回值修改是不可行的。

    2、finally块中避免使用return语句。因为finally块中使用return语句会显示的消化掉try、catch块中的异常信息,屏蔽了错误的发生。

    3、finally块中避免再次抛出异常。否则整个包含try语句块的方法回抛出异常,并且会消化掉try、catch块中的异常。

  • 相关阅读:
    eclipse配置Tomcat The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
    解决掉你心中 js function与Function的关系的疑问
    英语 one day
    合并两个有序链表
    有效的括号
    探讨前后端分离
    菜鸡发现腾讯视频bug
    最长公共前缀
    字符串转整数
    回文数
  • 原文地址:https://www.cnblogs.com/shijiaqi1066/p/3442605.html
Copyright © 2011-2022 走看看