最近面试遇到一个之前也看到过但没去看一下的问题.就是有return情况下的try,catch,finally的执行顺序. 今天写了下. 先看顺序问题.总结如下: 一:finally中没有写return: 1.不管有没写catch,也不管有没异常,不管try与catch内有没有return,finally始终会执行. 2.finally是在return后面的表达式运算后执行的,此时的i值会被保存(finally不做return,其他变化i值的操作不会产生结果),所以此时返回值是在finally执行…
定义 首先来看下 MDN 的定义: The try...catch statement marks a block of statements to try and specifies a response should an exception be thrown. try...catch语句标记要执行的语句,并指定一个当有异常抛出时候的响应 简短的一句的确描述了try...catch的大部分功能. 但是,最MDN的最后,有一段话是这么写的: Returning from a finally-…
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;          }        …
1.try块中没有抛出异常,try.catch和finally块中都有return语句 public static int NoException(){ int i=10; try{ System.out.println("i in try block is:"+i); return --i; } catch(Exception e){ --i; System.out.println("i in catch - form try block is:"+i); ret…
若try或catch中没有return语句,则按正常执行流,从上到下,finally里的所有修改都生效. 这里讨论的是try或catch里有return或throw语句的情形,此情形比较让人迷惑. 总结如下: finally语句在try或catch的return或throw语句执行之后返回之前执行 且 finally里的语句不影响try或catch中已经确定的返回值(但能改变try或catch中引用对象里的成员,这跟final修饰的效果很像),除非finally里也有return或者throw等…
前言:有java编程基础的人对java的异常处理机制都会有一定了解,而且可能感觉使用起来也比较简单,但如果在try catch finally语句块中遇到return语句,开发者可能就会遇到一些逻辑问题,甚至步入编程的陷阱.不信,我们先看看一段小程序,读者可以分析其逻辑然后猜测其输出结果: public class Test { public static void main(String[] args) { Test t = new Test(); System.out.println(t.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…
代码1测试 public static void main(String[] args) { aa(); } static int aa() { try { int a=4/0; } catch (Exception e) { e.printStackTrace(); return 1; }finally{ System.out.println("finally"); // return 2; return写在这里不规范,不是错误,但有感叹号 } return 2; } 输出结果如下:…
任何执行try 或者catch中的return语句之前,都会先执行finally语句,如果finally存在的话.如果finally中有return语句,那么程序就return了,所以finally中的return是一定会被return的,编译器把finally中的return实现为一个warning.…
以往认为函数只要执行到return语句便会返回结果并终止,然而这时错误的,因为这存在特例. 掌握下面几条原则就可以完全解决“当try.catch.finally遭遇return”的问题. 原则:1.finally语句块中的代码是一定会执行的,而catch块中的代码只有发生异常时才会执行. 2. 函数执行完try块中的return语句后不会终止,还会继续执行catch(仅在抛出异常时执行).finally语句块. 3.函数必须确保有唯一返回值 说明: try中如果包含return语句则catch块…