面试题答案
一键面试常见运行时异常
- NullPointerException:当应用程序试图在需要对象的地方使用
null
时抛出。例如调用null
对象的方法或访问其属性。 - IndexOutOfBoundsException:指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。如访问数组中不存在的索引位置。
- ArithmeticException:当出现异常的运算条件时抛出。例如,一个整数“除以零”时,抛出此类的一个实例。
常见非运行时异常
- IOException:当发生某种I/O异常时抛出。例如,文件不存在时进行读取操作。
- SQLException:提供关于数据库访问错误或其他错误信息的异常。在执行SQL语句时,若数据库连接问题、SQL语法错误等会抛出此异常。
- ClassNotFoundException:应用程序试图加载类时,类在其搜索路径中不存在,抛出该异常。比如使用
Class.forName()
加载一个不存在的类。
try - catch块捕获和处理异常
在一个可能抛出异常的方法中,使用 try - catch
块捕获和处理异常的示例如下:
public void someMethod() {
try {
// 可能抛出异常的代码
int result = 10 / 0; // 会抛出ArithmeticException
FileReader fileReader = new FileReader("nonexistentFile.txt"); // 会抛出FileNotFoundException,它是IOException的子类
} catch (ArithmeticException e) {
// 处理ArithmeticException异常
System.out.println("捕获到算术异常: " + e.getMessage());
} catch (IOException e) {
// 处理IOException异常
System.out.println("捕获到I/O异常: " + e.getMessage());
}
}
在 try
块中放置可能抛出异常的代码。当异常发生时,程序流程立即跳转到对应的 catch
块进行处理。不同类型的异常可以有不同的 catch
块,以便进行针对性的处理。
finally块的作用及使用场景
finally
块的作用是无论 try
块中是否发生异常,也无论 catch
块是否捕获到异常,finally
块中的代码总会被执行。
常见使用场景:
- 资源关闭:在使用完文件、数据库连接等资源后,在
finally
块中确保资源被关闭。例如:
FileReader fileReader = null;
try {
fileReader = new FileReader("example.txt");
// 读取文件的操作
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fileReader != null) {
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 清理操作:如释放锁资源等清理性的操作,无论程序是否正常结束或发生异常,都需要执行这些清理代码,就可以放在
finally
块中。