(1) 当 try 中抛出异常且 catch 中有 return 语句, finally 中没有 return 语句, java 先执行 catch 中非 return 语句,再执行 finally 语句,最后执行 catch 中 return 语句。详见情况一。
(2) 当 try 中抛出异常且 catch 中有 return 语句, finally 中也有 return 语句, java 先执行 catch 中非 return 语句,再执行 finally 中非 return 语句,最后执行 finally 中 return 语句,函数返回值为 finally 中返回的值。详见情况二。
(3) Throw (无论是 catch 中还是非 catch 中)后面不能再跟 code ,否则编译不能通过。详见下面情况三,四,五。
Return , finally 总结:
情况一,代码如下:
public class Test {
public int testTry() {
FileInputStream fi = null;
try {
fi = new FileInputStream("");
} catch (FileNotFoundException fnfe) {
System.out.println("this is FileNotFoundException");
return 1;
} catch (SecurityException se) {
System.out.println("this is SecurityException");
} finally {
System.out.println("this is finally");
}
return 0;
}
public static void main(String[] args) {
Test t = new Test();
System.out.println(t.testTry());
}
}
Output :
this is FileNotFoundException
this is finally
1
情况二,代码修改如下:
public class Test {
public int testTry() {
FileInputStream fi = null;
try {
fi = new FileInputStream("");
} catch (FileNotFoundException fnfe) {
System.out.println("this is FileNotFoundException");
return 1;
} catch (SecurityException se) {
System.out.println("this is SecurityException");
} finally {
System.out.println("this is finally");
return 3;
}
// return 0;
}
public static void main(String[] args) {
Test t = new Test();
System.out.println(t.testTry());
}
}
Output :
this is FileNotFoundException
this is finally
3
----------------------------------------------------
Return throw 总结:
情况三:
public class Test {
public static void main(String[] args) {
Test t = new Test();
try {
System.out.println(t.testTry());
} catch (Exception e) {
System.out.println("this is exception");
}
}
public int testTry() throws Exception {
FileInputStream fi = null;
try {
fi = new FileInputStream("");
} catch (FileNotFoundException fnfe) {
// System.out.println("this is FileNotFoundException");
throw new Exception();
return 1;
} catch (SecurityException se) {
System.out.println("this is SecurityException");
} finally {
System.out.println("this is finally");
}
return 0;
}
}
>javac Test.java
Test.java:22: 无法访问的语句
Return 1;
情况四:
public class Test {
public static void main(String[] args) {
Test t = new Test();
try {
System.out.println(t.testTry());
} catch (Exception e) {
System.out.println("this is exception");
}
}
public int testTry() throws Exception {
FileInputStream fi = null;
try {
fi = new FileInputStream("");
} catch (FileNotFoundException fnfe) {
// System.out.println("this is FileNotFoundException");
throw new Exception();
System.out.println("after throw exception");
// return 1;
} catch (SecurityException se) {
System.out.println("this is SecurityException");
} finally {
System.out.println("this is finally");
}
return 0;
}
}
>javac Test.java
Test.java:22: 无法访问的语句
System.out.println("this is SecurityException");
情况五:
public class Test {
public static void main(String[] args) {
Test t = new Test();
try {
t.testTry();
} catch (Exception e) {
System.out.println("this is exception");
}
}
public void testTry() throws Exception {
throw new Exception();
System.out.println("this is testTry method");
}
}
>javac Test.java
Test.java:22: 无法访问的语句
System.out.println("this is testTry method");
分享到:
相关推荐
### Java的throw和return 在Java编程语言中,`...综上所述,`throw`和`return`是Java中非常重要的控制流结构,它们与`finally`块之间有着紧密的联系。正确理解和运用这些概念对于编写健壮可靠的Java程序至关重要。
如果系统提供的异常类无法满足需求,开发者可以创建自己的异常类,继承自系统提供的异常类(如Java中的`Exception`类),添加额外的信息或功能。 8. **异常的最佳实践** - 应尽量避免在`catch`块中只简单地忽略...
在编程语言中,异常处理是确保程序稳定性和健壮性的重要...这些文件可能包含了具体的示例,演示了如何在不同情况下使用 `try-catch-finally` 结构以及 `return` 语句,从而帮助开发者更好地理解和掌握这一关键概念。
总的来说,`try-catch`机制是Java中异常处理的核心,它提供了对程序运行时错误的优雅处理方式,帮助开发者编写更加健壮的代码。通过合理地使用`try-catch`,我们可以确保程序在遇到问题时不会无端崩溃,而是能够适当...
`throw`关键字是Java中用于显式抛出异常的关键字。本实例将深入探讨如何使用`throw`来创建和处理自定义异常,以及它在实际编程中的应用。 首先,我们了解异常的基本概念。在Java中,异常是程序执行过程中遇到的不...
即使在 `try` 块中有 `return` 语句或者 `goto` 语句导致程序流程提前离开,`finally` 块的代码也会被执行。这是 `finally` 关键字的核心特性,确保资源清理逻辑总是能够被执行,比如关闭文件、释放内存等。 以下是...
5. throws关键字:在方法签名中使用throws声明一个或多个检查型异常,表明这些异常由调用者处理,而不是当前方法。 6. 自定义异常:通过继承Exception类或其子类,可以创建自定义异常类型,以满足特定的业务需求。 ...
Java中的异常处理是编程实践中必不可少的一部分,它确保了程序在遇到错误或异常情况时能够优雅地处理并继续执行,或者至少提供有用的错误信息。异常处理的主要目的是提高程序的健壮性和稳定性。 1. 为什么需要异常...
Java中的异常分为两大类:运行时异常(`RuntimeException`)和受检异常(`Exception`)。运行时异常通常是由于程序逻辑错误导致的,通常不应该被捕获;而受检异常则需要在编译时就进行处理。 #### 7. 自定义异常类 ...
这些代码通常是由特殊的for循环、try catch finally语句块、synchronized语句反编译后产生的。 下面,我们将介绍一些反编译后的特殊代码的还原规则。 1. 异常的还原 反编译后的代码如下: ```java public boolean...
Java异常处理机制主要依赖于以下几个关键字:`try`、`catch`、`throw`、`throws` 和 `finally`。 1. **try**:用于包裹可能引发异常的代码块。 2. **catch**:用于捕获try块中产生的特定类型的异常,并进行相应的...
Java中的异常处理是通过try、catch、finally和throw、throws关键字实现的。垃圾回收(GC)是Java虚拟机(JVM)的一个特性,它负责回收不再使用的内存资源。 在Java中,有多种类型的流,包括输入流和输出流,它们...
在这个“375.373.JAVA基础教程_异常处理-处理异常:try-catch方式(375)”的教程中,我们将深入探讨Java中的异常处理机制,特别是如何通过try-catch语句块来处理异常。 异常在Java中是一种对象,它是类`Exception`或...
- **用途**:导入类或包,以便可以在当前文件中使用。 - **示例**: ```java import java.util.List; ``` #### 9. `interface` - **用途**:用于声明接口,接口包含一组未实现的方法签名和常量。 - **示例**: ...
C++使用`try`、`catch`和`throw`关键字,但没有Java中的`finally`关键字。在C++中,可以使用`std::finally`(C++17及更高版本)或RAII(Resource Acquisition Is Initialization)技术来实现类似的清理行为。 了解...
为了解决这个问题,我们需要将checked exception转换为unchecked exception,以便在stream API中使用。 三、如何使用Java throw Exception实现异常转换? Java throw Exception实现异常转换的原理是使用throw...
即使在try或catch块中有return语句,finally块的代码仍然会被执行。 4. throw关键字:用于手动抛出一个异常。这在你需要表示某种错误条件,但又不想让程序立即终止时非常有用。 5. throws关键字:用于声明方法可能...
5. **throws关键字**:在方法签名中使用,用于声明该方法可能抛出的异常。如果方法可能会抛出异常但不处理,可以使用throws声明,将异常的处理责任推给调用该方法的代码。 Java的异常分为两种:**checked异常**和**...
1. **异常处理策略**:不要在每个函数中都使用 Try…Catch,而应该在最外层或适当的位置使用。如果内部函数捕获了异常,但还需要将异常信息传递给调用者,那么不应在内部 Catch,而是应重新抛出异常(如 `throw;` 或...