Try…catch…finally
2018-02-19 16:03
295 查看
研究问题:
try…catch…finally语句中含有return语句的执行情况?catch中return而finally返回顺序?
要点:
try语句在返回前,将其他所有的操作执行完,保留好要返回的值,而后转入执行finally中的语句,而后分为以下三种情况:情况一:如果finally中有return语句,则会将try中的return语句”覆盖“掉,直接执行finally中的return语句,得到返回值,这样便无法得到try之前保留好的返回值。
情况二:如果finally中没有return语句,也没有改变要返回值,则执行完finally中的语句后,会接着执行try中的return语句,返回之前保留的值。
情况三:如果finally中没有return语句,但是改变了要返回的值,这里有点类似与引用传递和值传递的区别,分以下两种情况,:
1)如果return的数据是基本数据类型或文本字符串,则在finally中对该基本数据的改变不起作用,try中的return语句依然会返回进入finally块之前保留的值。
2)如果return的数据是引用数据类型,而在finally中对该引用数据类型的属性值的改变起作用,try中的return语句返回的就是在finally中改变后的该属性的值。
来自 http://blog.csdn.net/ns_code/article/details/17485221
截图展示区:
情况一(try中有return,finally中没有return):public class TryTest{ public static void main(String[] args){ System.out.println(test()); } private static int test(){ int num = 10; try{ System.out.println("try"); return num += 80; }catch(Exception e){ System.out.println("error"); }finally{ if (num > 20){ System.out.println("num>20 : " + num); } System.out.println("finally"); } return num; } }
2. 情况二(try和finally中均有return):
public class TryTest{ public static void main(String[] args){ System.out.println(test()); } private static int test(){ int num = 10; try{ System.out.println("try"); return num += 80; }catch(Exception e){ System.out.println("error"); }finally{ if (num > 20){ System.out.println("num>20 : " + num); } System.out.println("finally"); num = 100; return num; } } }
3. 情况三(finally中改变返回值num):
public class TryTest{ public static void main(String[] args){ System.out.println(test()); } private static int test(){ int num = 10; try{ System.out.println("try"); return num; }catch(Exception e){ System.out.println("error"); }finally{ if (num > 20){ System.out.println("num>20 : " + num); } System.out.println("finally"); num = 100; } return num; } }
4. 将num的值包装在Num类中
public class TryTest{ public static void main(String[] args){ System.out.println(test().num); } private static Num test(){ Num number = new Num(); try{ System.out.println("try"); return number; }catch(Exception e){ System.out.println("error"); }finally{ if (number.num > 20){ System.out.println("number.num>20 : " + number.num); } System.out.println("finally"); number.num = 100; } return number; } } class Num{ public int num = 10; }
5.
package com.java.FinalKey; /* final/finally/finalize * final:修饰类、变量、方法 * finally:用于异常处理 * finalize:object类方法,用于垃圾回收 */ public class FinallyDemo2 { public static void main(String[] args) { System.out.println(getInt()); } public static int getInt() { int a = 10; try { System.out.println(a / 0); a = 20; } catch (ArithmeticException e) { a = 30; return a; } finally { a = 40; } return a; } }
相关文章推荐
- try、catch、finally
- Java中try catch finally语句中含return语句的执行情况总结-编程陷阱
- Java中的try+catch+finally+return的返回值问题
- try catch finally return运行顺序
- C# 中异常抛出捕获机制--throw / try,catch,finally
- Java解惑之try catch finally
- try catch finally巩固
- java 中 try catch finally 语句的执行顺序
- 关于try catch finally遇上return以后的执行顺序解析
- java中try catch finally注意事项,finally在代码中什么时候运行
- return在try-catch-finally语句中的使用
- 逐行读txt文件(读写文件try catch finally 处理空行,编码格式,文件流释放问题,处理读到重复问题)
- try catch finally 执行讲解
- try catch finally return之间的关系
- java中关于try、catch、finally中的细节分析
- try{}catch{}finally{}中加入return后的执行顺序
- 谈谈Java中try-catch-finally中的return语句
- try catch finally 用法
- try-catch-finally
- Java异常处理机制 try-catch-finally