Java异常类型及处理攻略
异常定义
在程序执行时,如果出现某种错误或异常,则会产生异常。Java中所有的异常信息都是用异常类的形式传递的。在Java中,所有异常都是派生于Throwable类(它是 Java 语言中所有错误或异常的超类)的一个子类。它既包括异常(Exception)也包括错误(Error),它们有各自的特点:
Exception
Exception类表示程序正常运行中发生的异常情况,它是程序可以捕获和处理的,这类异常通常包括:
- IOException(输入输出异常)
- SQLException(数据库查询异常)
- ClassNotFoundException(类不存在异常)
- NullPointerException(空指针异常)
- ...
这些异常可以在代码中使用try语句块进行捕获和处理。
Error
Error类表示程序运行过程中出现严重的错误,程序无法自行恢复并继续执行。常见的错误包括:
- OutOfMemoryError(内存溢出错误)
- StackOverflowError(堆栈溢出错误)
- NoClassDefFoundError(类找不到错误)
- ...
此类错误无法使用try语句块捕获和处理,需要对代码进行改进来避免这些错误。
异常处理
在Java中,使用try-catch-finally语句块来处理异常。try语句块主要包含可能出现异常的语句,如果在try块中发现异常,则抛出异常,代码将继续执行catch块中的代码,直到找到将异常处理的catch块,否则程序就会终止,并显示异常信息。
try {
// 可能抛出异常的代码
throw new Exception("这是一个异常");
} catch (Exception e) {
// 处理异常,输出异常信息
System.out.println("捕获到异常:" + e.getMessage());
} finally {
// 不管是否有异常,这里的代码都会被执行
System.out.println("finally块中的代码被执行");
}
上面的代码中,我们故意抛出了一个异常,通过catch块来捕获异常,然后输出异常信息。无论是否有异常发生,finally块中的代码都会被执行。
可以通过多个catch语句块来捕获不同类型的异常:
try {
// 可能抛出异常的代码
throw new SQLException("数据库异常");
} catch (IOException e1) {
// 处理IOException异常
} catch (SQLException e2) {
// 处理SQLException异常
} finally {
// 不管是否有异常,这里的代码都会被执行
}
此外,可以通过throws关键字将异常抛给调用方法的上层方法进行处理:
public void testMethod() throws Exception {
// 可能抛出异常的代码
throw new Exception("这是一个异常");
}
public void callingMethod() {
try {
testMethod();
} catch (Exception e) {
// 处理异常
}
}
如果不处理异常,可以通过throw关键字手动抛出异常:
if (status == 0) {
throw new Exception("状态值为0,抛出异常");
}
示例说明
示例1:输入输出异常
public static void main(String[] args) {
try {
BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
String line = reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}
reader.close();
} catch (FileNotFoundException e1) {
System.out.println("文件不存在");
} catch (IOException e2) {
System.out.println("读取文件时出现异常");
}
}
上面的代码中,我们尝试读取一个文件的内容,如果文件不存在或者读取文件时出现异常,将会抛出相应的异常并被捕获。如果出现了FileNotFoundException异常,将会输出“文件不存在”,否则将会输出“读取文件时出现异常”。
示例2:空指针异常
public static void main(String[] args) {
String str = null;
try {
System.out.println(str.length());
} catch (NullPointerException e) {
System.out.println("出现空指针异常");
}
}
上面的代码中,我们将一个变量初始化为null,然后尝试获取这个变量的长度,这将会抛出一个空指针异常并被捕获。如果出现空指针异常,将会输出“出现空指针异常”。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java异常类型及处理 - Python技术站