Java经典面试题汇总:异常
常见的异常类型
Java中常见的异常有三类:
- Checked Exceptions 受检异常
- Runtime Exceptions 运行时异常
- Errors 错误
Checked Exceptions
Checked Exceptions 又称为受检异常,是在编译阶段就被检测出来的异常。他们必须要被捕捉处理或者是被声明抛出。如 IOException
、SQLException
等等。
Runtime Exceptions
Runtime Exceptions 又称为运行时异常,是在程序运行时才能被捕获的异常。它们可以直接通过 throw
关键字抛出,也可以通过 Java 运行时系统检测出来。如 NullPointerException
、ArrayIndexOutOfBoundsException
等等。
Errors
Errors 错误是无法被恢复和处理的异常,是由于 JVM 运行引起的。如 OutOfMemoryError
、StackOverflowError
等等。
Java中的异常处理方式
Java中主要用 try-catch
语句来进行异常处理,可以选择性地使用 finally
关键字进行资源释放或者是清理工作。
try-catch-finally
每一个 try
块可以有多个 catch
语句和一个 finally
块。try
块中的程序代码被执行的过程中,倘若异常抛出,便跳转到 catch
块,在 catch
块中进行异常处理。
finally
块中的程序无论如何都会被执行,它的作用主要用来进行资源释放和清理工作,如关闭文件句柄、释放数据库连接等等。
下面是一个 try-catch-finally
的示例:
try{
// 可能抛出异常的代码
} catch (SomeException ex) {
// 处理异常的代码
} finally {
// 执行清理工作
}
finally的特定用法
finally
根据数据类型的不同又可细分为如下三种:
- 处理在
try
和catch
中可能出现的异常。 - 关闭数据库连接或文件句柄等清理工作。
- 在程序中抛出异常后,其中的代码将仍然执行。
下面是一些具体的 finally
的示例:
- 处理在
try
和catch
中可能出现的异常。
FileOutputStream file = null;
try {
file = new FileOutputStream("file.txt");
file.write("Hello World".getBytes());
// 执行其他业务代码
int i = 1 / 0; // 这里故意除数是 0,就会抛出异常
} catch (IOException e) {
e.printStackTrace();
// 处理 IOException 异常
} catch (ArithmeticException e) { // 捕捉 ArithmeticException 异常
e.printStackTrace();
// 处理发生的异常
} finally {
try {
file.close(); // 释放资源或者是清理工作
} catch (IOException e) {
e.printStackTrace();
}
}
在以上代码中,在 try-catch
块中执行文件的输入输出和其他业务,当发生异常时,会捕捉异常,并在 catch
语句中对异常进行处理,在 finally
语句中清理文件句柄等内存资源。
- 关闭数据库连接或文件句柄等清理工作。
public void resourceManage() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn = getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery(SQL_QUERY);
while (rs.next()) {
// 业务逻辑的处理
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException se) {
se.printStackTrace();
}
}
}
在以上代码中,在 try-catch
块中进行SQL语句的查询,并在 finally
语句中对三个资源进行关闭操作,释放资源或者是清理工作。
- 在程序中抛出异常后,其中的代码将仍然执行。
public int sum(int a, int b) {
try {
int c = a / b;
return c;
} catch (Exception e) {
return -1;
} finally {
System.out.println("sum() was executed");
}
}
在以上代码中,在 try-catch
块中进行实数的除法,当出现异常时,返回一个 -1
。在 finally
语句中输出信息,即使在 catch
语句块中 return 语句返回的结果与 finally
块无关,也会在 finally
块中执行。
总结
Java 中的异常处理主要采用 try-catch-finally
的方式,其中 try-catch
块用来处理捕获的异常。finally
块用于释放资源和清理工作。根据 finally
的不同用法可以分为如下三种:处理在 try
和 catch
中可能出现的异常、关闭数据库连接或文件句柄等清理工作和在程序中抛出异常后,其中的代码将仍然执行。
以上是 Java 异常处理的完整攻略。
参考:
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java经典面试题汇总:异常 - Python技术站