`
codecook
  • 浏览: 42269 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

finally结构的注意点(一)

阅读更多
我们知道,try-catch-finally结构和try-finally结构是用来捕获异常的典型结构。
而finally结构的作用,通常是在catch结构中抛出异常时做一些清理工作(如释放资源)。
然而有3个典型的问题,可能会影响我们对finally作用的判断。

第一个问题:如果在catch结构中抛出异常,finally结构是否会被执行?
代码如下:
	/**
	 * 测试:如果在catch结构中抛出异常,finally结构是否会被执行。 结果:会被执行。
	 * 
	 * @throws Exception
	 */
	public static void testThrowExceptionInCatch() throws Exception {
		try {
			throw new Exception();
		} catch (Exception ex) {
			throw new Exception();
		} finally {
			System.out.println("finally");// execute this line;
		}
	}

通过执行testThrowExceptionInCatch()函数,我们知道,finally是会执行的。(catch结构也产生了副作用,抛出的异常会覆盖try中抛出的异常)

第二个问题:如果在finally结构中抛出异常,那这个异常会不会覆盖try-catch结构中抛出的异常?
代码如下:
	/**
	 * 测试:如果在finally结构中抛出异常,那这个异常会不会覆盖try-catch结构中抛出的异常。 结果:会覆盖。
	 * 
	 * @throws Exception
	 */
	public static void testThrowExceptionInFinally() throws Exception {
		try {
			throw new Exception();
		} catch (Exception ex) {
			throw new Exception();
		} finally {
			System.out.println("start finally");
			throw new Exception();
		}
	}

通过执行testThrowExceptionInFinally()函数,发现finally结构中抛出异常覆盖了try-catch结构中抛出的异常。

第三个问题:如果在finally结构中有return语句,那这个返回值会不会覆盖try-catch结构中的返回值?
代码如下:
	/**
	 * 测试:如果在finally结构中有return语句,那这个返回值会不会覆盖try-catch结构中的返回值。 结果:会覆盖。
	 * 
	 * @return
	 * @throws Exception
	 */
	public static int testReturnValueInFinally() throws Exception {
		try {
			return 1;
		} catch (Exception ex) {
			throw new Exception();
		} finally {
			System.out.println("finally");
			return 2;// 覆盖返回值
		}
	}

通过执行testReturnValueInFinally()函数,返回值为2,可见finally结构中的return语句覆盖了try-catch结构中的返回值。

可见,finally除了做一些清理工作外,如果运用不当,也是会产生副作用的。
分享到:
评论

相关推荐

    try-catch-finally捕获异常

    下面将详细介绍try-catch-finally语句的使用方法和注意事项。 一、try块 try块是try-catch-finally语句的核心部分,用于包装可能出现异常的代码。try块中的代码在执行时,如果出现异常,会被catch块捕获和处理。...

    java 中finally语句块与return的执行关系

    在 try-catch-finally 结构中,finally 语句块的执行顺序是非常重要的。下面我们来详细探讨 finally 语句块与 return 的执行关系。 首先,需要了解的是,在 try-finally 或者 catch-finally 中,如果 try 或者 ...

    try-finally-return-in-finally.rar_return

    在编程语言中,`try-finally` 结构是用来确保一段代码在任何情况下(无论是正常执行还是抛出异常)都会被执行的语句块。这个结构在处理资源管理,比如文件流关闭或者网络连接断开等场景时特别有用。当我们谈论`...

    java面试题 谈谈final, finally, finalize的区别

    `finally` 用于定义一组必须在任何情况下(无论是否发生异常)都会执行的代码块。它常与 `try-catch` 结构一起使用,确保资源的释放和必要的清理工作。 ```java try { // 可能抛出异常的代码 } catch ...

    Java 实例 - Finally的用法源代码-详细教程.zip

    `finally`通常与`try-catch`块一起使用,构成一个完整的异常处理结构。下面将详细探讨`finally`的用法、作用以及相关的编程实践。 1. `try-catch-finally`结构: 在Java中,异常处理主要通过`try-catch`结构来实现...

    dotnet C# 在 finally 抛异常会发生什么.rar

    当`finally`块抛出异常时,以下几点值得注意: 1. **异常覆盖**:如果`finally`块中抛出了新的异常,那么原本在`try`块中抛出的异常会被新异常所覆盖。这意味着原始异常的信息将会丢失,除非在`finally`块内部捕获...

    深入浅析java中finally的用法

    使用finally块需要注意以下几点: 1. finally块只能用在try/catch语句中。 2. finally块中的代码一定会被执行,除非程序中止或退出。 3. finally块可以用于释放资源,例如关闭数据库连接、文件流等。 4. finally块...

    Java异常处理之try...catch...finally详解

    在catch块后还可以跟一个finally块,finally块用于回收在try块里打开的资源。 在使用try…catch语句块时需要知道或注意以下几点: 1. 处理过程:代码在执行的时候,进入try块,若是在try块中出现了异常,系统会...

    Java软件开发实战 Java基础与案例开发详解 10-5 finally关键字 共7页.pdf

    关于`return`语句的使用,有一个重要的原则:既不在`try`内部使用`return`语句,也不在`finally`内部使用`return`语句,而应该在`finally`语句之后使用`return`来表示函数的结束和返回。 通过以上的详细介绍,我们...

    try catch finally的执行顺序深入分析

    总的来说,`try-catch-finally`结构提供了一种强大的错误处理方式,确保了程序在遇到异常时能够继续执行关键的清理任务,并且控制返回值。理解这个执行顺序对于编写健壮的代码至关重要,特别是在处理资源管理和异常...

    数据结构(C#语言版)

    异常处理机制用于捕获和处理程序运行过程中可能出现的错误,通过try-catch-finally结构实现。 - **1.3.8 C#的标准输入/输出流** C#提供了丰富的标准输入输出流,如Console类,用于控制台应用程序的输入输出。 - *...

    Java try catch finally异常处理组合详解

    try catch finally组合的语法结构如下: ```java try { // 可能会抛出异常的语句 } catch (异常类型 e) { // 异常处理语句 } finally { // 资源释放语句 } ``` 多个catch组合: 多个catch组合用于捕获多种类型...

    java中使用try-catch-finally一些值得注意的事(必看)

    总结一下,使用`try-catch-finally`时需要注意以下几点: 1. `try`块用于包围可能抛出异常的代码。 2. `catch`块捕获`try`块中抛出的异常,可以有多个`catch`块处理不同类型的异常。 3. `finally`块中的代码无论如何...

    windows系统程序设计之结构化异常处理.docx

    然而,需要注意的是,结构化异常处理并不适用于所有类型的错误。例如,逻辑错误或程序设计错误通常不适用SEH,而更适合使用传统的错误处理机制,如返回错误代码或抛出异常对象。此外,SEH的使用需要谨慎,不当的处理...

    Java开发学习之Java基础语法注意点共2页.pdf.zip

    异常处理是Java中不可或缺的一部分,通过try-catch-finally结构捕获并处理运行时可能出现的错误。良好的异常处理可以使程序更健壮,提高用户体验。 再者,Java标准库提供了丰富的API,如集合框架(List、Set、Map等...

    java中final与finally的使用介绍

    - `finally` 通常与 `try-catch` 结构一起使用,用于提供一种确保某些代码无论是否发生异常都将被执行的机制。`finally` 块中的代码是必不可少的,特别是在处理资源关闭(如文件流、数据库连接等)时,以确保资源...

    谈谈Java中try-catch-finally中的return语句

    在Java编程语言中,`try-catch-finally`语句块是异常处理的关键构造,它允许程序员优雅地处理可能出现的异常情况。...在实际编程中,要注意`finally`块可能会影响方法的返回值,这在设计复杂的控制流程时需要特别注意。

    Java开发学习之Java基础语法注意点共2页.pdf.z

    以上就是“Java开发学习之Java基础语法注意点”的主要内容,对于初学者来说,熟练掌握这些基础知识是成为合格Java开发者的第一步。在实际开发过程中,还需要不断学习和理解Java的高级特性,如反射、线程、注解、泛型...

Global site tag (gtag.js) - Google Analytics