`
txf2004
  • 浏览: 7134637 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java异常捕获之try-catch-finally-return的执行顺序

 
阅读更多

情况1:try块中没有抛出异常try和finally块中都有return语句

 public static int NoException(){
  int i=10;
  try{
   System.out.println("i in try block is"+i);
   return --i;
  }catch(Exception e){
   --i;
   System.out.println("i in catch - form try block is"+i);
   return --i;
  }finally{
   
   System.out.println("i in finally - from try or catch block is"+i);
   return --i;
  }
 }


执行结果:

i in try block is10
i in finally - from try or catch block is9
the method value is8

执行顺序:执行try块,执行到return语句时,先执行return的语句,--i,但是不返回到main 方法,执行finally块,遇到finally块中的return语句,执行--i,并将值返回到main方法,这里就不会再回去返回try块中计算得到的值

情况2:try块中没有抛出异常,仅try中有return语句

代码:

	public static int NoException(){
		int i=10;
		try{
			System.out.println("i in try block is--"+i);
			return --i;
		}catch(Exception e){
			--i;
			System.out.println("i in catch - form try block is--"+i);
			return --i;
		}finally{
			
			System.out.println("i in finally - from try or catch block is--"+i);
			--i;
			System.out.println("i in finally block is--"+i);
			//return --i;
		}
	}


执行结果:

i in try block is--10
i in finally - from try or catch block is--9
i in finally block is--8
the method value is--9

顺序:try中执行完return的语句后,不返回,执行finally块,finally块执行结束后,返回到try块中,返回i在try块中最后的值

情况3:try块中抛出异常try,catch,finally中都有return语句

代码:

	public static int WithException(){
		int i=10;
		try{
			System.out.println("i in try block is--"+i);
			i = i/0;
			return --i;
		}catch(Exception e){
			System.out.println("i in catch - form try block is--"+i);
			--i;
			System.out.println("i in catch block is--"+i);
			return --i;
		}finally{
			
			System.out.println("i in finally - from try or catch block is--"+i);
			--i;
			System.out.println("i in finally block is--"+i);
			return --i;
		}
	}


执行结果:

i in try block is--10
i in catch - form try block is--10
i in catch block is--9
i in finally - from try or catch block is--8
i in finally block is--7
the method value is--6

顺序,抛出异常后,执行catch块,在catch块的return的--i执行完后,并不直接返回而是执行finally,因finally中有return语句,所以,执行,返回结果6

情况4,catch中有return,finally中没有,同上,执行完finally语句后,依旧返回catch中的执行return语句后的值,而不是finally中修改的值

情况5:try和catch中都有异常,finally中无return语句

	public static int CatchException(){
		int i=10;
		try{
			System.out.println("i in try block is--"+i);
			i=i/0;
			return --i;
		}catch(Exception e){
			System.out.println("i in catch - form try block is--"+i);
			int j = i/0;
			return --i;
		}finally{
			
			System.out.println("i in finally - from try or catch block is--"+i);
			--i;
			System.out.println("i in finally block is--"+i);
			//return --i;
		}
	}


结果:

i in try block is--10
i in catch - form try block is--10
i in finally - from try or catch block is--10
i in finally block is--9
Exception in thread "main" java.lang.ArithmeticException: / by zero
at exception.ExceptionTest0123.CatchException(ExceptionTest0123.java:29)
at exception.ExceptionTest0123.main(ExceptionTest0123.java:17)

执行顺序:在try块中出现异常,到catch中,执行到异常,到finally中执行,finally执行结束后判断发现异常,抛出

情况6:try,catch中都出现异常,在finally中有返回

	public static int CatchException(){
		int i=10;
		try{
			System.out.println("i in try block is--"+i);
			i=i/0;
			return --i;
		}catch(Exception e){
			System.out.println("i in catch - form try block is--"+i);
			int j = i/0;
			return --i;
		}finally{
			
			System.out.println("i in finally - from try or catch block is--"+i);
			--i;
			System.out.println("i in finally block is--"+i);
			return --i;
		}
	}


运行结果:

i in try block is--10
i in catch - form try block is--10
i in finally - from try or catch block is--10
i in finally block is--9
the method value is--8

执行顺序:try块中出现异常到catch,catch中出现异常到finally,finally中执行到return语句返回,不检查异常

没有catch,只有try和finally时,执行顺序和上面的几种情况差不多,只是少了catch块的执行

欢迎大家补充指正

分享到:
评论

相关推荐

    try-catch-finally捕获异常

    try-catch-finally语句是Java语言中一种常用的异常处理机制,当程序在执行过程中出现异常时,可以使用try-catch-finally语句来捕获和处理异常。下面将详细介绍try-catch-finally语句的使用方法和注意事项。 一、try...

    try-catch-finally-return-in-finally.rar_return

    标题 "try-catch-finally-return-in-finally.rar_return" 提到了 `try-catch-finally` 结构与 `return` 语句的交互,这涉及到程序执行流程的关键方面。 `try` 块是用来包含可能会抛出异常的代码。如果在 `try` 块中...

    try_catch_finally异常处理java

    当Java执行到可能抛出异常的代码行时,如果确实发生了异常,那么控制权就会立即转移到与之关联的`catch`块。 `catch`块是用来捕获和处理异常的地方。每个`catch`块都对应一个特定的异常类或者异常类的父类,这样就...

    使用try-catch-finally处理异常

    即使在`try`或`catch`块中有return语句,`finally`块的代码也会被执行。 5. **多层嵌套** 你还可以在`try-catch-finally`结构内部嵌套另一个`try-catch-finally`结构,以处理更复杂的情况。这种方式使得异常处理...

    java try…catch捕获异常的实例

    `try-catch`块是Java异常处理的核心部分,它允许程序员在代码可能出现问题的地方进行异常捕获和处理,避免程序因未预期的错误而崩溃。下面我们将详细讨论`try-catch`捕获异常的实例。 首先,`try`块是包含可能抛出...

    375.373.JAVA基础教程_异常处理-处理异常:try-catch方式(375).rar

    2. **catch**:catch块用于捕获try块中抛出的异常。每个try可以有多个catch块,每个catch对应处理一种类型的异常。当try块中的异常被抛出时,Java会根据异常类型匹配相应的catch块。 3. **finally**:无论是否发生...

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

    `try`块通常包含可能会抛出异常的代码,`catch`块捕获并处理这些异常,而`finally`块则保证无论是否发生异常,都会执行特定的清理操作,如关闭资源。`finally`块对于确保资源的正确释放至关重要,因为它总是在方法...

    Java异常处理-异常处理的方式1

    在Java中,异常处理主要通过两种方式实现:捕获异常(try-catch-finally)和声明异常(throws + 异常类型)。本篇文章将详细介绍第一种方式——捕获异常。 异常处理的抓抛模型是Java异常处理的核心概念。当程序执行...

    exception-try-catch-java

    即使`try`或`catch`块中有`return`语句,`finally`块的代码仍然会被执行。 `throw`关键字用于手动抛出一个异常。程序员可以在检测到错误条件时主动抛出异常,而不是等待Java运行时系统自动抛出。 ```java throw ...

    Java 实例 - 使用 catch 处理异常源代码-详细教程.zip

    `try`块包含可能抛出异常的代码,`catch`块用来捕获并处理这些异常,而`finally`块则确保无论是否发生异常,都会执行的代码。 3. **try块** 在try块中,我们放置可能引发异常的代码。如果在try块内发生异常,控制...

    java异常ppt

    Java通过一套结构化的异常处理机制来管理这些问题,主要包括五个关键字:try、catch、finally、throw和throws。 `try`块包含可能抛出异常的代码,如果在`try`块中发生异常,控制流会立即跳转到匹配的`catch`块。`...

    Java异常面试题(2022最新版).docx

    - **try-catch-finally**: `try`块用来包含可能抛出异常的代码,`catch`块用来捕获并处理这些异常,`finally`块则无论是否发生异常都会执行。 - **try-with-resources**: Java 7引入的新特性,用于自动关闭实现了`...

    Java finally语句到底是在return之前还是之后执行?

    `try`块包含可能会抛出异常的代码,`catch`块捕获并处理这些异常,而`finally`块则包含必须执行的清理代码。`finally`的执行规则如下: 1. 如果`try`块中的代码没有抛出异常,那么`finally`块会在`try`块结束时执行...

    Power builder9异常处理

    然而,上述方法只能处理部分预知的错误,对于不可预知的异常,PB9 提供了 `TRY...CATCH...FINALLY...END TRY` 结构,类似于其他编程语言的异常处理机制。这个结构允许开发者定义一段可能抛出异常的代码(在 `TRY` 块...

    Java异常处理-异常处理知识点总结及企业真题

    `finally`块后面的代码不会被`try-catch`结构内的`return`语句中断。 在实际编程中,对运行时异常的处理往往更加灵活,因为它们可以在程序的任何位置发生,而编译时异常则需要在编译期间显式处理。使用`throws`...

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

    即使`catch`块没有捕获到异常,`finally`块的代码也会在程序退出`try-catch`之前被执行。这样可以确保在程序的任何路径下,一些关键操作(如关闭文件流或网络连接)都能得到妥善处理。 2. `finally`块的执行条件: ...

    03-Java异常面试题.docx

    Java 异常架构与异常关键字...try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?类 ExampleA 继承 Exception,类 ExampleB 继承 ExampleA。常见的 RuntimeException 有哪些?Java 常见异常有哪些?

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

    在Java、C#、JavaScript等语言中,`try-catch-finally`结构是异常处理的基础。这个结构的执行顺序是固定的,下面我们将深入分析其工作原理。 首先,程序会尝试执行`try`块中的代码。`try`块的作用是包含可能抛出...

    Java-Java异常处理教程

    Java提供了结构化的异常处理机制,通过使用`try-catch-finally`块来捕获和处理这些异常。 1. **异常类层次**:Java的异常都是`java.lang.Throwable`类的子类,包括`Exception`和`Error`两大类。`Exception`是可被...

    Java异常面试题(2020最新版).pdf

    8. try-catch-finally中,如果catch中return了,finally还会执行吗? 9. 类ExampleA继承Exception,类ExampleB继承ExampleA。 10. 常见的RuntimeException有哪些? 11. Java常见异常有哪些 Java异常处理是Java开发...

Global site tag (gtag.js) - Google Analytics