java异常8:finally关键字的特点及作用

finally的特点

(1)被finally控制的语句体一定会执行。
(2)特殊情况:在执行到finally之前jvm退出了(比如System.exit(0))。
案例演示:


public class Demo7_Finally {
	public static void main(String[] args) {
		try {
			System.out.println(1 / 0);
			
		} catch (Exception e) {
			System.out.println("除数为零了");
			System.exit(0);//退出jvm虚拟机
			return;
		} finally {
			System.out.println("看看我执行了吗");
		}
	}
}

运行结果如下:
java异常8:finally关键字的特点及作用_第1张图片

finally的作用

(1)用于释放资源,在IO流操作和数据库操作中会见到。

final、finally、finallize的区别

(1)final

1.可以修饰类,不能被继承。
2.修饰方法不能被重写。
3.修饰变量,只能赋值一次。

(2)finally

是try语句中的一个语句体,不能单独使用,用来释放资源。

(3)finalize

是一个方法,当垃圾回收器确定不存在对该对象更多应用时,由对象的垃圾回收器调用此方法。

问题

如果catch里面有return语句,请问finally的代码还会执行吗?如果会,请问是在return前还是在return后。
案例演示:

public class Demo8_Test {
     public static void main(String[] args) {
          Demo d = new Demo();
          int n = d.method();
          System.out.println(n);
     }
}
class Demo {
     public int method() {
          int x = 10;
          try {
              x = 20;
              System.out.println(1 / 0);
              return x;
          } catch (Exception e) {
              x = 30;
              return x;
          } finally {
              x = 40;
              System.out.println("finally执行了!");
          //   return x;     千万不要在finally里面写返回语句,因为finally的作用是为了释放资源,是肯定执行的
          }                       //如果在这里写返回值,那么try和catch的结果都会被改变。此外在执行return处时,return语句先
                                  //建立返回路径,然后执行finally语句体,finally语句体执行完是,在执行return语句。 
     }
}

执行结果:
java异常8:finally关键字的特点及作用_第2张图片
运行结果表明当要执行return语句时,先建立return语句要返回的路径,返回路径中的返回值就是x=30,然后再执行finally语句体,finally语句体执行完后再执行return语句。

你可能感兴趣的:(java异常8:finally关键字的特点及作用)