欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java编程中异常处理 try-catch-finally语句的一些分析

程序员文章站 2022-03-26 16:40:23
本文是一篇Java编程异常处理相关的学习笔记,包含了一些对 try-catch-finally的粗浅分析。...

本文是我的学习笔记,若有错误,欢迎在评论区留言。

目录

实例1

实例2

实例3

实例4

实例5

总结


实例1

话不多说,直接上代码:

public class TestFinally {
	
	public static float test1(int n) {
		try {
			n = 100/n;
			return n;
		} finally {
			System.out.println("方法内部finally语句执行了!");
		}
	}
	
	public static void main(String[] args) {
		System.out.println(test1(1));
	}
	
}

运行结果:

方法内部finally语句执行了!
100.0

我们可以看到,如果try里面有return,并成功return了东西。则会先运行finally里的语句再去return。

 

实例2

但是我们需要注意的是,如果我们是完整的 try-catch-finally 语句,因为try和catch语句都是有可能会被执行的,所以catch语句中需要有return。否则IDE会报错。

public class TestFinally2 {
	
	public static float test1(int n) {
		try {
			n = 100/n;
			return n;
		} catch (Exception e) {
			System.out.println("方法内部catch语句执行了!");
			return n;
		} finally {
			System.out.println("方法内部finally语句执行了!");
		}
	}
	
	public static void main(String[] args) {
		System.out.println(test1(1));
	}
	
}

运行结果:

方法内部finally语句执行了!
100.0

 

实例3

而我们用 TestFinally2的代码,在main里执行新的语句:

System.out.println(test1(0));

运行结果:

方法内部catch语句执行了!
方法内部finally语句执行了!
0.0

由此可见,当test1 这个方法中出现异常时会直接跳转到执行 catch里的语句(当然得满足Catch参数的异常)。同时,也会执行finally语句。但是我们发现return是在 try-catch-finally 运行完毕之后才执行的(这句话我说得不太清楚,以后随着学习深入,会用更专业的术语更正)

 

实例4

我们再来看这个实例


public class TestFinally3 {
	
	public static float test1(int n) {
		try {
			n = 100/n;
			return n;
		} catch (Exception e) {
			System.out.println("方法内部catch语句执行了!");
			return n+1;
		} finally {
			System.out.println("方法内部finally语句执行了!");
			return n+2;
		}
	}
	
	public static void main(String[] args) {
		System.out.println(test1(0));
	}
	
}

输出结果:

方法内部catch语句执行了!
方法内部finally语句执行了!
2.0

其实我们可以看出来,虽然执行了catch语句,但是catch语句里的return是没有被执行的。反倒是,最后执行的是finally语句的return。(这边底层的原理我不清楚,如果有哪位大神能解释一下就好了,非常感谢)但需要注意的是,这样的写法IDE会有提示(应该是不规范)

Java编程中异常处理 try-catch-finally语句的一些分析

 

实例5


public class TestFinally4 {
	
	public static float test1(int n) {
		try {
			n = 100/n;
		} finally {
			System.out.println("方法内部finally语句执行了!");
		}
		return n;
	}
	
	public static void main(String[] args) {
		System.out.println(test1(0));
	}
	
}

输出结果:

方法内部finally语句执行了!
Exception in thread "main" java.lang.ArithmeticException: / by zero
	at TestFinally4.test1(TestFinally4.java:6)
	at TestFinally4.main(TestFinally4.java:14)

对于这个实例的结果我表示非常奇怪,这里做个标记!

 

注意!我们不能在finally里有return,同时在 try-catch-finally 语句之后还有return。IDE会报错!

Java编程中异常处理 try-catch-finally语句的一些分析

 

总结

Java处理异常 try-catch-finally 的一个顺序:

  1. 先看try里面有没有异常。如果有异常,则进入2。若无异常,进入finally。finally语句里面的return优先级是大于catch和try的。意思是说,即使try和catch中有return,但如果finally也有return。则最终会使用finally中的return。
  2. 当try里面有异常,会进入到catch语句。但如果是一个有返回值的方法,我们需要注意(详见实例2)
  3. 无论如何,finally里的语句都会被执行!

我们不能在finally里有return,同时在 try-catch-finally 语句之后还有return。

 

参考文章:

https://blog.csdn.net/qq_35584878/article/details/101275980 (在总结的基础上增添了代码实例,以及我自己的总结)

https://blog.csdn.net/mxd446814583/article/details/80355572 (未引用,将来可能补充引用)

 

 

本文地址:https://blog.csdn.net/qq_35939846/article/details/109818223