捕获多个异常
当遇到异常时,除了可以将异常抛出,还可以将其捕获。抛出虽然简单,但是有时却不得不使用捕获来处理异常。如果程序遇到异常而没有捕获,则程序会直接退出。这在大多数情况下是不能被接受的,至少需要保存程序当前状态才能退出。本实例将演示如何捕获多个异常,实例运行效果如图
Java中捕获异常是通过try、catch和finally 3个块来完成的。其中try块是必需的,catch和finally块可以选择一个或两个。try块用来放置可能出现问题的语句,如果在try块中可能出现多个异常,则最好提供多个catch块来进行捕获。这样可以针对不同的异常提供不同的处理方案。如果try块中程序的异常和第一个catch块捕获的异常不匹配,JVM将比较第二个catch块,依此类推,直到出现匹配的为止。如果没有找到匹配的,异常对象将抛给调用该方法的方法。
编写类CatchExceptions,在该类的main()方法中演示了try、catch和finally块的用法。代码如下:
package com.mingrisoft.exception; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class CatchExceptions { private static String URL = "jdbc:mysql://localhost:3306/db_database18"; private static String DRIVER = "com.mysql.jdbc.Driver"; private static String USERNAME = "mr"; private static String PASSWORD = "mingri"; private static Connection conn; public static Connection getConnection() { try { Class.forName(DRIVER);// 加载驱动程序 conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);// 建立连接 return conn; } catch (ClassNotFoundException e) {// 捕获类为发现异常 e.printStackTrace(); } catch (SQLException e) {// 捕获SQL异常 e.printStackTrace(); } return null; } public static void main(String[] args) { CatchExceptions.getConnection(); } }
说明:代码中首先捕获了ClassNotFoundException,然后是SQLException。
心法领悟:捕获多个异常的使用。
对于可能抛出多个异常的代码块,可以不对每个异常都提供一个catch块进行处理。此时需要提供这些异常的父类,如Exception,使用catch块处理。当有多个catch块时,它们排列的顺序非常重要。一定要让异常的范围按从小到大排列。在相同继承层次的可以不考虑排列顺序。