大家都知道
try{
}chatch(){
}finally{
}
是java中异常处理最常见的一种方法,面试中也经常会考到这方面的知识,我也看了无数遍,但总是很容易忘记,也许写出来会记忆深刻些吧.
假设try块中一个return语句的话,那么catch和finally中的代码还会执行吗?如果会执行,那么顺序又是什么?我写了个测试类分别测试了以上问题:
测试一:
class Test22
{
public static String test(){
try{
//throw new Exception();
return "return";
}catch(Exception e){
System.out.println("catch");
}finally{
return "finally";
}
}
public static void main(String[] args)
{
System.out.println(test());
}
}
输出结果为:finally
这说明finally先执行,其实我这也可以通过理解return的意义来理解这个顺序,return是指跳出这个语句块,跳出了自然不能回来再执行里面的语句了,而finally又是必须执行的,所以在跳出之前还是让finally执行完吧.
测试二:
class Test22
{
public static String test(){
try{
throw new Exception();
}catch(Exception e){
System.out.println("catch");
}finally{
return "finally";
}
}
public static void main(String[] args)
{
System.out.println(test());
}
}
输出结果:
catch
finally
这就是平常最常见的顺序了,try中势力出了异常,那么就是catch中执行了,然后就是finally里的语句了.
测试三:
class Test22
{
public static String test(){
try{
throw new Exception();
}catch(Exception e){
return "catch";
}finally{
return "finally";
}
}
public static void main(String[] args)
{
System.out.println(test());
}
}
输出结果:
finally
在catch中有return和try块中有return是一样的情况了.
这次我应该是理解得比较透彻了,希望不要忘记了.
分享到:
相关推荐
在这种情况下,程序会按顺序执行 try、catch、finally 语句,然后返回。 情况 2:try{ return; }catch(){} finally{} return; 在这种情况下,程序会先执行 try 块中的 return 语句,但不返回;然后执行 finally ...
如果在`try`块中的代码没有发生任何异常,那么`catch`块将不会被执行,程序会直接跳到`finally`块。 如果`try`块中的代码确实抛出了一个异常,那么相应的`catch`块会被执行。`catch`块通常包含处理特定异常的代码,...
try-catch-finally执行顺序验证(左边是.java文件,右边是.class文件) 提示: try、catch块内的return操作编译后会变成把return的值保存到变量var的操作。 总结: try、catch块内的return操作编译后会变成把return的值...
Java try catch finally异常处理组合详解 Java try catch finally异常处理组합是Java语言中的异常处理机制,用于捕获和处理程序中的异常。下面对try catch finally异常处理组合进行详细的介绍。 try catch组合: ...
即使在`try`或`catch`块中有`return`语句,`finally`块的代码也会被执行。 ```csharp finally { // 无论是否发生异常都会执行的代码 } ``` 在示例中,无论`j`的值是否为0,`finally`块的`Console.WriteLine(j....
注意,嵌套的`catch`块按顺序执行,这意味着更具体的异常类型应该放在前面,因为一旦匹配到一个异常类型,后续的`catch`块将被跳过。此外,`finally`块总是最后执行,无论是否抛出异常,它都是必不可少的资源清理...
1. `catch`块的顺序:如果有多个`catch`块,应该将更具体的异常类型放在前面,因为一旦一个`catch`块捕获了异常,后续的`catch`块将不再执行。 2. 避免过度使用`catch`:如果只捕获异常而不处理,可能会掩盖真正的...
多个 `catch` 块按照它们在代码中的顺序来处理异常。如果某个异常类型被两个或更多 `catch` 块所捕获,则最先定义的那个 `catch` 块会被执行。 #### 六、结论 通过以上的介绍,我们可以看到 `try-catch` 在异常...
"Java中try finally return语句的执行顺序浅析" 关于Java中try finally return语句的执行顺序浅析是Java语言中一个重要的知识点,今天我们来探讨一下try finally return语句的执行顺序。 首先,需要了解的是...
在 try-catch-finally 结构中,finally 语句块的执行顺序是非常重要的。下面我们来详细探讨 finally 语句块与 return 的执行关系。 首先,需要了解的是,在 try-finally 或者 catch-finally 中,如果 try 或者 ...
`try`块包含可能会抛出异常的代码,`catch`块捕获并处理这些异常,而`finally`块则包含必须执行的清理代码。`finally`的执行规则如下: 1. 如果`try`块中的代码没有抛出异常,那么`finally`块会在`try`块结束时执行...
总结一下,`try-catch-finally`块中的`return`语句执行顺序如下: 1. `try`块中的代码被执行。 2. 如果遇到`return`语句,会创建一个临时变量,保存`return`语句要返回的值。 3. `finally`块被执行。 4. `finally`...
在`finally`块中,即使在`try`或`catch`块中抛出异常,也会执行清理代码。在上面的`CodeWithCleanup`方法中,`finally`块确保了`FileStream`在不再需要时会被关闭,即使在写入过程中发生异常。 需要注意的是,`...
1. **不要单独使用 try、catch 或 finally 语句块**:在Java中,`try`语句块用于包含可能抛出异常的代码,`catch`用于捕获并处理特定类型的异常,而`finally`则用于定义无论是否发生异常都要执行的清理代码。...
例如,如果`try`或`catch`块中有一个`return`语句,`finally`块将在`return`之前执行,但不会阻止`return`语句的执行。 关于字节码层面的解释,根据《深入Java虚拟机》一书的描述,`finally`块的实现是通过`jsr`...
#### 五、try-catch-finally 的执行顺序 1. **正常执行**:如果`try` 块内的代码正常执行完毕(没有抛出异常),则执行`finally` 块。 2. **异常发生**:如果`try` 块内的代码抛出了异常,并且有对应的`catch` 块...
- 如果try块中的代码抛出异常,将按顺序检查`catch`块,找到匹配异常类型的`catch`并执行相应的处理代码。执行完`catch`后,`finally`块的代码会执行。 - 如果所有`catch`块都不能匹配抛出的异常,异常会被提交给...
4. **return** 与 `try-catch-finally` 结合:如果 `try` 或 `catch` 里有 `return` 语句,`finally` 仍然会执行,但是 `return` 之后的代码不会被执行。在示例 `T2` 中,`finally` 里的 `return` 会覆盖掉 `try` 中...
Java 中 finally 语句的执行顺序探讨 在 Java 中,finally 语句的执行顺序是一个常见的探讨话题。很多人都认为 finally 语句一定会被执行,但这是不正确的。在某些情况下,finally 语句可能不会被执行,例如在 try ...
- 在值类型中,如果在`try`块内抛出异常,`finally`块执行后,返回值不会改变,因为值类型的变量是按值传递的。 - 对于引用类型,如果在`try`块内抛出异常,`finally`块内的代码可以改变对象的状态,即使在异常被...