java try catch finally return执行顺序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java try catch finally return执行顺序相关的知识,希望对你有一定的参考价值。
try
catch
finally
return;
这样一段代码,顺序是不是先try块无异常的话就return,有异常的话就catch块再return,最后再finally?
执行顺序无异常是try finally return
有异常并且catch中没有跳出程序块的语句时顺序是try catch finally return
有异常并且catch中有跳出程序块的语句时是try catch(执行到跳出之前) finally catch(执行跳出)
给你个参考程序吧
贴main函数里执行下就看出来顺序了
System.out.println("begin");List list=new ArrayList<Integer>();
list.add(1);
for(int i=0;i<=2; i++)
try
System.out.println(list.get(i));
catch(Exception e)
System.out.println(e);
continue;
finally
System.out.println("stop");
System.out.println("out");
参考技术A
先try 若有异常就catch,然后finally
class Testpublic static void main(String args[])
System.out.println(Test.test());
public static String test()
try
System.out.println("try");
throw new Exception();
catch(Exception e)
System.out.println("catch");
return "return";
finally
System.out.println("finally");
return "return in finally";
The results is:
try
catch
finally
return in finally 参考技术B try里面是放的有可能出错的代码,如果try里面的代码出错了,catch就会捕获到所出的错误,如果没有错误就不执行catch里面的代码,catch就相当于一个错误提示,错了就给你说,至于那个finally是在try-catch-finaly中最后且必须要执行的代码,最后才是return 参考技术C try无异常的话,进finally,然后return;有异常进catch,然后进finally,不会执行到return那一行。追问
为何有异常就不执行return了?
追答一旦异常被catch了,那么就会跳入catch块的语句继续执行,出错行后面的语句都不会继续执行了,除了finally块中的。
换句话说,除非你在catch块中或者finally块中return,不然就肯定无法return了。
java之try catch finally
try{ }catch(Exception e){ }finally{ }
java异常处理在编程中很常见,将可能抛出异常的语句放在try{}中,若有异常抛出,则try{}中抛出异常语句之后的语句不再执行。catch (Exception e) {}抓取异常并进行处理;若无异常,catch中的语句不执行。finally{}中主要做善后工作,如资源回收。无论是否有异常抛出,finally中的语句都会执行。finally中的语句将会在异常捕获机制退出前被调用。
下面来看三个简单的例子:
例1、
public static void test1() { try { HttpURLConnection connection = (HttpURLConnection) new URL("").openConnection(); System.out.println("try"); } catch (Exception e) { System.out.println("exception"); } finally { System.out.println("finally"); } System.out.println("end"); } /* 输出: exception finally end */
例2、
public static void test1() { try { HttpURLConnection connection = (HttpURLConnection) new URL("http://www.baidu.com").openConnection(); System.out.println("try"); } catch (Exception e) { System.out.println("exception"); } finally { System.out.println("finally"); } System.out.println("end"); } /* 输出: try finally end */
例3、
public static void test1() { try { HttpURLConnection connection = (HttpURLConnection) new URL("http://www.baidu.com").openConnection(); System.out.println("try"); return; } catch (Exception e) { System.out.println("exception"); } finally { System.out.println("finally"); } System.out.println("end"); } /* 输出: try finally */
首先来第一个例子,HttpURLConnection connection = (HttpURLConnection) new URL("").openConnection();url地址为空,抛出异常,try中之后的语句不在执行,直接跳到catch{}中,所以输出结果中没有"try"。
第二个例子中,url可用,没有抛出异常,所以catch{}中的语句不执行,所以输出结果中没有"catch"。
在例3中,因为没有异常抛出,所以catch不执行。因为try中已经有return了,所以之后的语句不在执行。在return之前,按照异常捕获机制,在退出前将调用finally。
以上是关于java try catch finally return执行顺序的主要内容,如果未能解决你的问题,请参考以下文章
java try catch finally return执行顺序
Java Try Catch finally 没有 Catch 的块