finally代码块什么时候执行???finally代码块真的一定会执行吗

finally代码块一般是和try、catch代码块一块使用的。但是一般什么时候执行呢???先看一段代码吧。

package T1;

import java.util.*;

public class A {
	private int i;
	public int f() {
		try {
			return ++i;
		}catch(Exception e) {
			return 100;
		}finally {
			System.out.println("你好呀!");
		}
		
	}
	public static void main(String[] args) {
		System.out.println(new A().f());
	}
}

这段代码执行的结果是:

你好呀!
1

         从运行结果可以看出,finally会在try块中的return语句执行前执行的。如果在finally中含有return语句,那么try中的语句将不再执行,因为我们知道一个函数一旦return,那么这个函数将被销毁,其他的将不被执行。这种很简单,将不再粘贴代码。

        在finally中改变变量的值是否对最终函数返回的变量的值是否有影响呢???答案是不一定!因为变量有基本类型的变量,有引用类型的变量。基本数据类型的变量在finally中改变,不会对返回值产生影响,但是引用型的变量将会产生影响。可以参照下面的代码进行分析

package T1;

import java.util.*;

public class A {
	private int i;
	private StringBuffer sb=new StringBuffer("Hello");
	public int f1() {
		try {
			return ++i;
		}catch(Exception e) {
			return 100;
		}finally {
			i=10;
		}
		
	}
	public StringBuffer f2() {
		try {
			return sb;
		}catch(Exception e) {
			return null;
		}finally {
			sb.append(" world!");
		}
		
	}
	public static void main(String[] args) {
		System.out.println(new A().f1());
		System.out.println("/////分界线呀!");
		System.out.println(new A().f2());
	}
}

1
/////分界线呀!
Hello world!

       运行结果如上。

      finally真的一定会执行吗?答案是否定的,如果try块没有被执行(也就是说在try块之前程序已经异常退出),或者在try块中执行了System.exit(0);,都将导致finally不会被执行。

猜你喜欢

转载自blog.csdn.net/sinat_32687677/article/details/82557560