try-catch-finally及return执行顺序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/superit401/article/details/89706619
public static void main(String[] args) {
//		System.out.println("0".charAt(0)-'0');//0
//		System.out.println("".charAt(0)-'0');//String index out of range: 0
		System.out.println(t(null)+","+t("0")+","+t(""));
	}
	public static int t(String str){
		try{
			return str.charAt(0)-'0';
		}catch(NullPointerException e){
			
			e.printStackTrace();
			return 1;
		}catch(StringIndexOutOfBoundsException e){
			
			e.printStackTrace();
			return 2;
		}catch(Exception e){
			
			e.printStackTrace();
			return 3;
		}finally{
			System.out.println("finally");
			return 4;
		}
	}

执行结果:

再把finally里的return 4;注释掉,测试结果:

结论:

(1)执行顺序(或优先级):try语句—>catch语句(如果报异常)—>finally语句—>finally里的return—>catch里的return—>try里的return

(2)try执行后,finally不一定执行,理由:

①try语句里有System.exit(0);语句

②当一个线程在执行 try 语句块或者 catch 语句块时被打断(interrupted)或者被终止(killed),与其相对应的 finally 语句块可能不会执行。

③更极端的情况,就是在线程运行 try 语句块或者 catch 语句块时,突然死机或者断电,finally 语句块肯定不会执行了。

猜你喜欢

转载自blog.csdn.net/superit401/article/details/89706619