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 Test

    public 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了。

参考技术D 不是的 try 执行 出异常 catch 然后 finally 不出异常 直接finally 最后执行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

java try catch finally return执行顺序

Java Try Catch finally 没有 Catch 的块

java异常中try或catch语句中可以有return语句吗?如有return会执行finall

Java:简述try-catch-finally异常捕获

Java:简述try-catch-finally异常捕获