(总结)try{}catch{}中有return,finally{}的执行情况

总结:

1、不管程序有没有bug,也不管try{}catch{}中有没有return语句,finally{}中的代码都会执行(记住这点)。

2、先看例子......

看下面的代码:

class Program
    {
        static void Main(string[] args)
        {
            int x = 0;
            x = GetValue();
            Console.WriteLine(" x的值为:" + x);

            Console.ReadKey();
        }

        public static int GetValue()
        {
            int y = 0;
            try
            {
                y = 1;
                return ++y;
            }
            catch (Exception)
            {
                return y = 0;
            }
            finally
            {
                y = y + 1;
                Console.WriteLine(" y的值为:" + y);
            }
        }
    }

输出结果如下:
y的值为:3

x的值为:2

如图:

再次总结:

1、不管程序有没有bug,也不管try{}catch{}中有没有return语句,finally{}中的代码都会执行(上面已提过);

2、当try或catch中有return时,执行到return语句时,会先把要返回的结果临时保存起来,然后跳到finally中执行相应语句,最后再把保存的返回结果返回,所以上面的x的值仍然为2

时间: 2024-12-07 14:29:09

(总结)try{}catch{}中有return,finally{}的执行情况的相关文章

【转】case: Java中try catch finally语句中含有return语句的执行情况(总结版)

Java中try catch finally语句中含有return语句的执行情况(总结版) 有一点可以肯定,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也是不建议在finally中return的原因.下面来看这几种情况. 情况一(try中有return,finally中没有return): [java] view plain copy public class TryTest{ public 

Java中try catch finally语句中含有return语句的执行情况(总结版)

在这里看到了try >但有一点是可以肯定的,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也是不建议在finally中return的原因.下面来看这几种情况. 情况一(try中有return,finally中没有return): public class TryTest { public static void main(String[] args) { System.out.println(t

Java中try catch finally语句中含有return语句的执行情况

finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也是不建议在finally中return的原因.下面来看这几种情况. 情况一(try中有return,finally中没有return): public class TryTest{ public static void main(String[] args){ System.out.println(test()); } private static

Java_try,catch,finally return之间的执行顺序

以往认为函数只要执行到return语句便会返回结果并终止,然而这时错误的,因为这存在特例. 掌握下面几条原则就可以完全解决“当try.catch.finally遭遇return”的问题. 原则:1.finally语句块中的代码是一定会执行的,而catch块中的代码只有发生异常时才会执行. 2. 函数执行完try块中的return语句后不会终止,还会继续执行catch(仅在抛出异常时执行).finally语句块. 3.函数必须确保有唯一返回值 说明: try中如果包含return语句则catch块

try catch finally中return语句与非return语句的执行顺序问题

finally语句一定是会被执行的,不管前边的try块catch块中有无return语句,并且如果finally中存在return语句,这个return语句将会是最后执行的return语句,即函数最后的返回值.try,catch中的return并不是让函数直接返回,而是return语句执行完毕,把返回结果放到函数栈中,转而执行finally块,所以,若是finally中含有return语句,那么函数栈中的返回值将被刷新.看以下几种情况: 1:try有return,finally无 public

try-catch-finally 中哪个部分可以省略?try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?

try-catch-finally 中哪个部分可以省略? finally这部分可以省略 try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗? 会执行 1.不管有没有异常,finally中的代码都会执行2.当try.catch中有return时,finally中的代码依然会继续执行3.finally是在return后面的表达式运算之后执行的,此时并没有返回运算之后的值,而是把值保存起来,不管finally对该值做任何的改变,返回的值都不会改变

try--catch--finally中return返回值执行的顺序(区别)

1.try块中没有抛出异常,try.catch和finally块中都有return语句 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public static int NoException(){          int i=10;          try{            System.out.println("i in try block is:"+i);            return --i;          }        

try-catch-finally中return语句的执行

catch里return后还会执行finally吗??在java里,是的.但是值得注意的是,在存在try-catch-finally的方法中,return可能出现的位置有4个,在try中,在catch中,在finally中,在finally后(try-catch-finally外的语句块).在这4个位置都出现return的情况下(事实上应该是不可能的,如果前面3个位置都存在return,那么最后一个位置的return就成了unreachable code,编译不会通过),最终会执行的return

try{ return } - catch{}-finally{} 执行情况,内部解析

1. try{ return } - catch{}-finally{} 等价于 try{} - catch{ return }-finally{} 这种情况 public class Test{ public static void main(String args[]){ int a = getObj() ; System.out.print(a.c) } static Test2 getObj(){ Test2 test2 = new Test2(); try{ test2.c = 2;