finally 一定会执行

class Exc{
	int a;
	int b;
}

public class Except {
	@SuppressWarnings("finally")
	static int   compute (){
		Exc e = new Exc();
		e.a = 10;
		e.b = 10;
		int res = 0 ;
		try{
			res = e.a / e.b;
			System.out.println("try ……");
			return res + 1;

		}catch(NullPointerException e1){
			System.out.println("NullPointerException occured");
		}catch(ArithmeticException  e1){
			System.out.println("ArithmeticException occured");
		}catch(Exception e3){
			System.out.println("Exception occured");
		}finally{
			System.out.println("finnaly occured");
		}
		System.out.println(res);

		return res+3;
	}

	public static void main(String[] args){
		int b =  compute();
		System.out.println("mian b= "+b);
	}
}

  输出:

try ……
finnaly occured
mian b= 2

结论: 如果没有异常, 则执行try 中的代码块,直到 try 中的 return,接着执行 finally 中的代码块,finally 执行完后 , 回到try 中执行 return 。退出函数。

class Exc{
	int a;
	int b;
}

public class Except {
	@SuppressWarnings("finally")
	static int   compute (){
		Exc e = new Exc();
//		e.a = 10;
//		e.b = 10;
		int res = 0 ;
		try{
			res = e.a / e.b;
			System.out.println("try ……");
			return res + 1;

		}catch(NullPointerException e1){
			System.out.println("NullPointerException occured");
		}catch(ArithmeticException  e1){
			System.out.println("ArithmeticException occured");
		}catch(Exception e3){
			System.out.println("Exception occured");
		}finally{
			System.out.println("finnaly occured");
		}
		System.out.println(res);

		return res+3;
	}

	public static void main(String[] args){
		int b =  compute();
		System.out.println("mian b= "+b);
	}
}

  输出:

ArithmeticException occured
finnaly occured
0
mian b= 3

结论: 如果try 中有异常, 则在异常语句处,跳转到catch 捕获的异常代码块, 执行完 catch 后,再执行 finally ,跳出 try{}catch{}finally{} ,继续向下执行,不会去执行try中 后面的语句。

时间: 2024-10-14 06:35:01

finally 一定会执行的相关文章

finally块中的代码一定会执行吗?

    public static void main(String[] args) { //        // TODO Auto-generated method stub         try {             System.out.println("how's the weather today?");         } catch (Exception e) {             System.out.println("i don't know

finally代码块不被执行的情况总结

以前跟别人讨论finally关键字,我总是简单的说:"fianly代码块中的代码一定会执行,一般用来清除IO资源等非内存资源(内存资源由GC机制回收)". 今天翻书发现了几种不会执行的情况,现在总结下. 1.finally的含义 finally的真正含义是指从try代码块出来才一定会执行相应的finally代码块. public class Test { public static void main(String[] args) { foo(false); } public stat

Java return和finally执行顺序

在Java语法中,return表示当前执行的结束,finally则是在当前代码块一定会执行的代码块.如果return在finally在之前执行,finally也会执行吗?答案是肯定的! 但是,finally和return的执行顺序则并不是真正意义上的先后顺序. 1 public String test(){ 2 String s = ""; 3 try { 4 s = "try"; 5 System.out.println(s); 6 return s; 7 } c

关于Java中try catch finally throw return的执行顺序问题

try {          normal statement;     //1.          exception occurred;   //2.          return "try";      } catch (Exception ex) {     normal statement;     //3.          return "catch";      } finally {          normal statement;     

try catch finally的执行顺序

转载自搏击的小船的博文 原文地址:http://www.cnblogs.com/guanjie20/archive/2010/02/14/2350270.html 1.将预见可能引发异常的代码包含在try语句块中.2.如果发生了异常,则转入catch的执行.catch有几种写法:catch这将捕获任何发生的异常.catch(Exception e)这将捕获任何发生的异常.另外,还提供e参数,你可以在处理异常时使用e参数来获得有关异常的信息.catch(Exception的派生类 e)这将捕获派生

SQL Server SQL性能优化之--通过拆分SQL提高执行效率,以及性能高低背后的原因

复杂SQL拆分优化 拆分SQL是性能优化一种非常有效的方法之一, 具体就是将复杂的SQL按照一定的逻辑逐步分解成简单的SQL,借助临时表,最后执行一个等价的逻辑,已达到高效执行的目的 一直想写一遍通过拆分SQL来优化的博文,最近刚好遇到一个实际案例,比较有代表性,现分享出来, 我们来通过一个案例来分析,为什么拆分语句可以提高SQL执行效率,更重要的是弄清楚,拆分前为什么慢,拆分后为什么快了? 幼稚的话,各位看官莫笑 先看一下相关表的数据量,大表也有5900多万,小表有160多万 (声明:我从来没

Java try、catch、finally及finally执行顺序详解(转)

1.为什么要用finally先看一个没有finally的异常处理try-catch语句:假设count为要使用到的资源,并且用完要求释放此资源.那么我们可以把释放资源的语句放到try-catch后执行,当前的程序不管是在执行完try语句块还是catch语句块,都会顺序执行到下面释放资源的语句. int count = 0; //初始化资源 try{ count++; if(count == 1) throw new Exception("Exception in try"); }cat

Finally语句块的执行

一.finally语句块是否一定执行? Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过试验验,至少以下有两种情况下finally语句是不会被执行的: (1).异常捕获机制finally块与try和catch块是关联的,既然是关联的如果try...catch...finally语句逻辑上达不到没有被 执行,如在try语句之前就返回了,这样finally语句就不会执行,这也说明了finally语

Java关键字 Finally执行与break, continue, return等关键字的关系

长文短总结: 在程序没有在执行到finally之前异常退出的情况下,finally是一定执行的,即在finally之前的return语句将在finally执行之后执行. finally总是在控制转移语句(break,continue,return等)执行之前执行. 可不能小看这个简单的 finally,看似简单的问题背后,却隐藏了无数的玄机.接下来我就带您一步一步的揭开这个 finally 的神秘面纱. 问题分析 首先来问大家一个问题:finally 语句块一定会执行吗? 很多人都认为 fina