Java中常见的异常有三类:
Checked Exceptions 又称为受检异常,是在编译阶段就被检测出来的异常。他们必须要被捕捉处理或者是被声明抛出。如 IOException
、SQLException
等等。
Runtime Exceptions 又称为运行时异常,是在程序运行时才能被捕获的异常。它们可以直接通过 throw
关键字抛出,也可以通过 Java 运行时系统检测出来。如 NullPointerException
、ArrayIndexOutOfBoundsException
等等。
Errors 错误是无法被恢复和处理的异常,是由于 JVM 运行引起的。如 OutOfMemoryError
、StackOverflowError
等等。
Java中主要用 try-catch
语句来进行异常处理,可以选择性地使用 finally
关键字进行资源释放或者是清理工作。
每一个 try
块可以有多个 catch
语句和一个 finally
块。try
块中的程序代码被执行的过程中,倘若异常抛出,便跳转到 catch
块,在 catch
块中进行异常处理。
finally
块中的程序无论如何都会被执行,它的作用主要用来进行资源释放和清理工作,如关闭文件句柄、释放数据库连接等等。
下面是一个 try-catch-finally
的示例:
try{
// 可能抛出异常的代码
} catch (SomeException ex) {
// 处理异常的代码
} 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 异常处理的完整攻略。
参考:
本文链接:http://task.lmcjl.com/news/13234.html