`

try catch finally的执行顺序

 
阅读更多

1.try catch finally中的finally不管在什么情况之下都会执行,执行的时间是在程序return之前。


2.Java编译器不允许有显示的执行不到的语句块,比如return之后就不可能再有别的语句块(分支不属于此列),所以以下程序编译会报错:

 

package com.practice.model;

public class Test {
	public String testSeq() {
		String result="end";
		int i = 0;
		try {
			System.out.println(6/i);
//			System.out.println(i);
			System.out.println("in try...");
			return result;
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("In catch...");
			return result;
		} finally {
			System.out.println("In finally....");
//			return result;
		}
		return result;
	}
	
	public static void main(String[] args){
		Test test=new Test();
		String rs=test.testSeq();
		System.out.println("result = "+rs);
	}

}

 原因是由于try{...}catch{...}块中都已存在return。


3.以下是几个小例子:


1)

package com.practice.model;

public class Test {
	public String testSeq() {
		String result1="Normal";
        String result2="Exception";
		int i = 0;
		try {
//			System.out.println(6/i);
			System.out.println(i);
			System.out.println("in try...");
			return result1;
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("In catch...");
			return result2;
		} finally {
			System.out.println("In finally....");
		}
	}
	
	public static void main(String[] args){
		Test test=new Test();
		String rs=test.testSeq();
		System.out.println("result = "+rs);
	}

}

 

执行结果是:

0
in try...
In finally....
result = Normal
 

 

 

2)

package com.practice.model;

public class Test {
	public String testSeq() {
		String result1="Normal";
        String result2="Exception";
		int i = 0;
		try {
			System.out.println(6/i);
//			System.out.println(i);
			System.out.println("in try...");
			return result1;
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("In catch...");
			return result2;
		} finally {
			System.out.println("In finally....");
		}
	}
	
	public static void main(String[] args){
		Test test=new Test();
		String rs=test.testSeq();
		System.out.println("result = "+rs);
	}

}

 

执行结果是:

java.lang.ArithmeticException: / by zero
	at com.practice.model.Test.testSeq(Test.java:9)
	at com.practice.model.Test.main(Test.java:24)
In catch...
In finally....
result = Exception
 

 

分享到:
评论

相关推荐

    try、catch、finally、return 执行顺序.doc

    try、catch、finally、return 执行顺序详细讲解 try、catch、finally、return 执行顺序是 Java 编程语言中的一种 exception 处理机制,用于处理程序中的异常情况。下面我们来详细讲解 try、catch、finally、return ...

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

    如果在`try`块中的代码没有发生任何异常,那么`catch`块将不会被执行,程序会直接跳到`finally`块。 如果`try`块中的代码确实抛出了一个异常,那么相应的`catch`块会被执行。`catch`块通常包含处理特定异常的代码,...

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

    Java try catch finally异常处理组合详解 Java try catch finally异常处理组합是Java语言中的异常处理机制,用于捕获和处理程序中的异常。下面对try catch finally异常处理组合进行详细的介绍。 try catch组合: ...

    try-catch-finally执行顺序验证

    try-catch-finally执行顺序验证(左边是.java文件,右边是.class文件) 提示: try、catch块内的return操作编译后会变成把return的值保存到变量var的操作。 总结: try、catch块内的return操作编译后会变成把return的值...

    java try…catch嵌套捕获异常的实例

    在这个结构中,`try`块包含可能会抛出异常的代码,每个`catch`块分别捕获不同类型的异常,`finally`块则包含需要无论发生何种情况都必须执行的代码,如资源清理。 接下来,我们来探讨嵌套的`try-catch`块。当一个`...

    C#中的try catch finally用法分析

    即使在`try`或`catch`块中有`return`语句,`finally`块的代码也会被执行。 ```csharp finally { // 无论是否发生异常都会执行的代码 } ``` 在示例中,无论`j`的值是否为0,`finally`块的`Console.WriteLine(j....

    C# 中的try catch finall 的使用方法

    1. `catch`块的顺序:如果有多个`catch`块,应该将更具体的异常类型放在前面,因为一旦一个`catch`块捕获了异常,后续的`catch`块将不再执行。 2. 避免过度使用`catch`:如果只捕获异常而不处理,可能会掩盖真正的...

    try-catch的用法和含义

    多个 `catch` 块按照它们在代码中的顺序来处理异常。如果某个异常类型被两个或更多 `catch` 块所捕获,则最先定义的那个 `catch` 块会被执行。 #### 六、结论 通过以上的介绍,我们可以看到 `try-catch` 在异常...

    java.try-catch-finally(解决方案).md

    try-catch-finally结构是Java中处理异常的基础,其基本用法包括:try块用于包裹可能出现异常的代码,catch块用于捕获并处理特定类型的异常,而finally块则用于执行无论是否发生异常都需要执行的代码,例如资源清理和...

    C#异常处理终极指南:try-catch-finally的深度实践.pdf

    在C#中,异常处理是通过try-catch-finally结构实现的,这一结构使得程序能够对潜在的错误进行捕获和处理,以及执行必要的清理工作。 异常是程序运行时出现的一种错误状态,可以由多种情况引起,如文件读写错误、...

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

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

    C#异常处理全攻略:try、catch、finally的正确打开方式.pdf

    finally语句块在try-catch结构中是可选的,但当需要执行一些无论是否发生异常都必须执行的代码时,finally语句块非常有用。无论是否捕获到异常,finally语句块中的代码都会被执行。例如,通常在finally语句块中释放...

    关于Java中try finally return语句的执行顺序浅析

    "Java中try finally return语句的执行顺序浅析" 关于Java中try finally return语句的执行顺序浅析是Java语言中一个重要的知识点,今天我们来探讨一下try finally return语句的执行顺序。 首先,需要了解的是...

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

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

    C#异常处理实战:从try-catch到自定义异常的完整避坑手册.pdf

    无论try块或catch块是否执行,finally块中的代码总是会被执行一次。这使得finally块成为执行清理工作的理想位置,确保程序的资源管理更为安全。 除了上述基础的异常处理方式之外,C#还支持自定义异常。通过继承自...

    C#异常处理中try和catch语句及finally语句的用法示例

    在`finally`块中,即使在`try`或`catch`块中抛出异常,也会执行清理代码。在上面的`CodeWithCleanup`方法中,`finally`块确保了`FileStream`在不再需要时会被关闭,即使在写入过程中发生异常。 需要注意的是,`...

    使用异常处理语句需要注意的几个问题

    1. **不要单独使用 try、catch 或 finally 语句块**:在Java中,`try`语句块用于包含可能抛出异常的代码,`catch`用于捕获并处理特定类型的异常,而`finally`则用于定义无论是否发生异常都要执行的清理代码。...

    java面试题之try中含return语句时代码的执行顺序详解

    总结一下,`try-catch-finally`块中的`return`语句执行顺序如下: 1. `try`块中的代码被执行。 2. 如果遇到`return`语句,会创建一个临时变量,保存`return`语句要返回的值。 3. `finally`块被执行。 4. `finally`...

    java finally块执行时机全面分析

    例如,如果`try`或`catch`块中有一个`return`语句,`finally`块将在`return`之前执行,但不会阻止`return`语句的执行。 关于字节码层面的解释,根据《深入Java虚拟机》一书的描述,`finally`块的实现是通过`jsr`...

    java.try-except(解决方案).md

    为了妥善处理这些运行时错误,Java 提供了一套完整的异常处理机制,主要通过 try-catch-finally 语句块来实现。 首先,try 块内包含的代码是可能会抛出异常的代码。当 try 块中的语句执行时,如果出现异常,那么...

Global site tag (gtag.js) - Google Analytics