- Java类
- Java包
- Java方法
- Java访问
- Java创建
- Java对象(Object)
- Java内部类
- Java继承
- Java抽象类
- Java泛型类
- Java异常
- Java接口
- Java枚举
- Java注解
Java finally块
try
块也可以有零个或一个finally
块。 finally
块总是与try
块一起使用。
语法
finally
块的语法是:
finally { // Code for finally block }
finally
块以关键字finally
开始,后面紧跟一个大括号和一个大括号。finally
块的代码放在大括号内。
try
,catch
和finally
块有两种可能的组合:try-catch-finally
或try-finally
。try
块可以后跟零个或多个catch
块。try
块最多可以有一个finally
块。try
块必须有一个catch
块和一个finally
块或两者都有。try-catch-finally
块的语法是:
try { // Code for try block } catch(Exception1 e1) { // Code for catch block } finally { // Code for finally block }
try-finally
块的语法是:
try { // Code for try block } finally { // Code for finally block }
无论在相关联的try
块和/或catch
块中发生什么,finally
块中的代码都保证执行。所以,一般使用finally
块来写清理代码。
例如,可能用来释放一些资源,如数据库连接的关闭,文件的关闭等,当完成它们时,必须释放。
在try-finally
块允许实现这个逻辑。代码结构将如下所示:
try { // Obtain and use some resources here } finally { // Release the resources that were obtained in the try block }
示例-1
下面的代码演示了finally
块的使用。
public class Main { public static void main(String[] args) { int x = 10, y = 0, z = 0; try { System.out.println("Before dividing x by y."); z = x / y; System.out.println("After dividing x by y."); } catch (ArithmeticException e) { System.out.println("Inside catch block a."); } finally { System.out.println("Inside finally block a."); } try { System.out.println("Before setting z to 2."); z = 2; System.out.println("After setting z to 2."); } catch (Exception e) { System.out.println("Inside catch block b."); } finally { System.out.println("Inside finally block b."); } try { System.out.println("Inside try block c."); } finally { System.out.println("Inside finally block c."); } try { System.out.println("Before executing System.exit()."); System.exit(0); System.out.println("After executing System.exit()."); } finally { // This finally block will not be executed // because application exits in try block System.out.println("Inside finally block d."); } } }
上面的代码生成以下结果。
Before dividing x by y. Inside catch block a. Inside finally block a. Before setting z to 2. After setting z to 2. Inside finally block b. Inside try block c. Inside finally block c. Before executing System.exit().
重新抛出一个异常
捕获的异常可以被重新抛出。
public class Main { public static void main(String[] args) { try { m1(); } catch (MyException e) { // Print the stack trace e.printStackTrace(); } } public static void m1() throws MyException { try { m2(); } catch (MyException e) { e.fillInStackTrace(); throw e; } } public static void m2() throws MyException { throw new MyException("An error has occurred."); } } class MyException extends Exception { public MyException() { super(); } public MyException(String message) { super(message); } public MyException(String message, Throwable cause) { super(message, cause); } public MyException(Throwable cause) { super(cause); } }
上面的代码生成以下结果。
MyException: An error has occurred. at Main.m1(Main.java:14) at Main.main(Main.java:4)
- Java教程
- Vim教程
- Swing教程
- Spring教程
- Spring Web Services教程
- Spring MVC教程
- Spring JDBC教程
- Spring Cloud教程
- Spring Boot教程
- Spring Boot CLI教程
- Spring Batch教程
- Spring AOP教程
- PDFBox教程
- JSP教程
- JSF教程
- JPA教程
- Java面向对象设计
- Java设计模式
- Java虚拟机教程
- Java泛型教程
- Java正则表达式教程
- Java数据类型教程
- Java并发编程教程
- Java密码学教程
- Java多线程教程
- Java国际化(i18n)教程
- JavaFX教程
- Java9教程
扫描二维码
程序员编程王