在执行程序过程中,我们有时候会看到控制台给出xxxException提示,那么这些提示代表什么呢?今天本文主要讲解Exception相关内容经常会遇到的一些Exception和捕获异常的方法。
什么是异常?
异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。引发异常的可能有很多,有的是用户错误触发的,有的是程序错误触发的,还有一些物理因素触发的异常。所有的异常都是java.lang.Exception的子类。
异常的分类:
1、检查性异常(Checked Exception):
又称为非运行时异常,当程序受到检查性异常时,只会暂停而不会停止程序的运行,程序中抛出的异常被捕获后经过JVM处理或者人为的处理后,程序继续恢复运行。检查性异常在程序编译时不能被简单的忽略。
2、运行时异常(Runtime Exception):
又称为非检查性异常,是在程序运行过程中发生的异常,会自动终止程序的运行。运行时异常是可能被程序员避免的异常,可以在程序编译时被忽略。
3、错误(Error):
错误不是异常,在代码中通常会被忽略。
Java常见异常:
检查性异常:
异常名称 | 异常描述 |
ArrayIndexOutOfBoundsException | 数组范围越界异常,即使用的索引值不在数组的正确索引范围内。 |
ArrayStoreException | 试图将错误类型的对象存储到一个对象数组时抛出的异常。 |
ClassCastException | 类型转换异常,当试图将对象强制转换为不是实例的子类时,抛出该异常。 |
IllegalArgumentException | 抛出的异常表明向方法传递了一个不合法或不正确的参数。 |
IllegalStateException | 在非法或不适当的时间调用方法时所抛出的异常。 |
IllegalThreadStateException | 线程没有处于请求操作所要求的适当状态时抛出的异常。 |
IndexOutOfBoundsException | 排序索引超出范围时所抛出的异常。 |
NullPointerException | 空指针异常,没有指向的对象时抛出该异常。 |
NumberFormatException | 数值转换异常,当程序试图将字符串转换成某种数值类型未成功时,抛出该异常。 |
UnsupportedOperationException | 当程序不支持请求的操作时抛出的异常。 |
StringIndexOutOfBoundsException | 字符串索引越界异常,当操作字符串时,如果所以为负数或者超出字符串长度,抛出该异常 |
运行时异常:
异常名称 | 异常描述 |
IllegalAccessException | 拒绝访问一个类的时候,抛出该异常。 |
InstantiationException | 试图使用 Class 类中的 newInstance 方法创建一个类的实例,而指定的类对象因为是一个接口或是一个抽象类而无法实例化时,抛出该异常。 |
ClassNotFoundException | 应用程序试图加载类而找不到相应的类时,抛出该异常。 |
InterruptedException | 抛出的异常表明向方法传递了一个不合法或不正确的参数。 |
NoSuchFieldException | 程序请求的变量不存在时抛出的异常。 |
NoSuchMethodException | 程序请求的方法不存在时抛出的异常。 |
异常捕获方法:
1、try...catch...捕获异常:
public static Connection getConnection() {
try {
return DriverManager.getConnection(url,user,passwd);
}catch(SQLException e) {
e.printStackTrace();
return null;
}
}
2、try...catch...多重捕获异常:
try {
//代码块
}catch(Exception a) {
a.printStackTrace();
}catch(Exception b) {
b.printStackTrace();
}catch(Exception c) {
c.printStackTrace();
}
3、try...catch...finally...捕获异常:
public void save(Emp emp) {
Connection conn = null;
try {
conn = DriverManager.getConnection(url,username,password);
}catch(SQLException e) {
e.printStackTrace();
}finally {
conn.close();
}
}
4、throw/throws关键字捕获异常:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//代码块
}