当遇到异常时,除了可以将异常抛出,还可以将其捕获。抛出虽然简单,但是有时却不得不使用捕获来处理异常。如果程序遇到异常而没有捕获,则程序会直接退出。这在大多数情况下是不能被接受的,至少需要保存程序当前状态才能退出。本实例将演示如何捕获多个异常,实例运行效果如图
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块时,它们排列的顺序非常重要。一定要让异常的范围按从小到大排列。在相同继承层次的可以不考虑排列顺序。