本文最后更新于 295 天前,其中的信息可能已经有所发展或是发生改变。
异常
Throwable
特点
- 异常类的基类
- 所有的异常类(
Exception,Error)都继承于Throwable类
- 提供了通用的方法用来获取异常的信息
方法
| 方法 |
描述 |
String getMessage() |
获取异常的简要描述,通常是传入异常构造器的字符串 |
String getLocalizedMessage() |
获取本地化的异常信息,子类可重写 |
String toString() |
返回异常的类名与详细信息 |
void printStackTrace() |
打印异常的堆栈信息到System.err |
void printStackTrace(PrintStream s) |
将异常的堆栈信息输出到指定的PrintStream |
void printStackTrace(PrintWriter) |
将异常的堆栈信息输出到指定的PrintWriter |
分类
检查型异常
CheckedException
- 编译时异常,必须要处理,否则程序无法运行
常见异常类
| 类名 |
描述 |
IOException |
输入/输出异常的基类 |
SQLException |
数据库访问异常的基类 |
ClassNotFoundException |
试图访问不存在的类 |
NoSuchMethodException |
试图访问不存在的方法 |
IllegalAccessException |
没有权限访问类或方法 |
InterruptedException |
线程被打断时抛出的异常 |
FileNotFoundException |
访问文件失败,文件不存在或无权限 |
MalformedURLException |
URL格式错误 |
EOFException |
读取文件或流时遇到文件结尾 |
UnknownHostException |
试图解析位置的主机地址 |
SQLTimeoutException |
数据库操作超时 |
SQlSyntaxErrorException |
SQL语法错误 |
非检查型异常
UncheckedException,RuntimeException
- 运行时异常,由程序运行时的错误引起
常见异常类
| 类名 |
描述 |
ArithmeticException |
算数异常 |
NullPointerException |
空指针异常 |
ArrayIndexOutOfBoundsException |
数组越界异常 |
NegativeArraySizeException |
负数数组大小异常 |
ClassCaseException |
类型转换异常 |
IllegalArgumentException |
非法参数异常 |
错误
Error
- 通常由
JVM引起,表示JVM本身的故障
常见异常类
| 类名 |
描述 |
OutOfMemoryError |
JVM内存溢出 |
StackOverflowError |
方法调用栈溢出 |
异常处理
异常捕获
使用
- 通过
try-catch语句捕获异常
- java7之后支持多异常捕获
| 关键字 |
描述 |
try |
包含可以会产生异常的代码块 |
catch |
捕获匹配catch块的异常并进行相应的处理 |
finally |
无论是否发生异常,都会执行处理,通常用于关闭资源 |
示例
try{
int a = 0 / 2;
}catch(ArithmeticException e){
e.printStackTrace();
}catch(NullPointerException | ArrayIndexOutOfBoundsException e){
//多异常捕获处理
}finally{
System.out.println("end");
}
抛出异常
使用
示例
throw new Exception();
声明异常
使用
示例
public void readFile(String fileName) throws IOException{
//...
}
异常链
使用
- 在使用
try-catch捕获异常之后,抛出另一个异常
示例
try{
//...
}catch(ArithmeticException e){
throw new Exception("计算错误");
}
自定义异常
使用
示例
public class MyException extends Exception{
public MyException(String message){
super(message);
}
}