Java 异常处理
什么是例外?
异常是一个中断正常执行流程的事件。这是 Java 程序执行期间的中断。
在本教程中,你将学习 -
- 什么是例外?
- 为什么我们需要例外?
- 如何处理例外
try...catch
- Java 异常类层次结构
- Java Finally Block
有两种类型的错误:
- 编译时间错误
- 运行时错误
编译时错误可以再次分类为两种类型:
- 语法错误
- 语义错误
语法错误示例:
假如你不是用 int a;
,而是错误地用 in a;
,那么编译器会抛出错误。
示例:你已声明变量 int a;
并在一些代码行之后再次将整数声明为 int a;
。编译代码时会突出显示所有这些错误。
运行时错误示例
运行时错误称为异常错误。任何事件都会中断正常的程序执行流程。
例外的例子有,算术异常,Nullpointer 异常,除零异常等。
Java 中的异常是开发人员无法控制的。
为什么我们需要 Exception?
假设你已编写了一个程序来访问服务器。在开发代码时,工作正常。
在实际生产运行期间,服务器已关闭。当你的程序尝试访问它时,会引发异常。
如何处理异常
到目前为止,我们已经看到,异常超出了开发人员的控制范围。但是将代码失败归咎于环境问题并不是解决方案。你需要一个强大的编程,它可以处理异常情况。这样的代码称为异常处理程序。
在我们的示例中,当服务器关闭时,良好的异常处理将连接到备份服务器。
要实现此功能,请输入你的代码以连接到服务器(使用传统的 if 和 else 条件)。
你将检查服务器是否已关闭。如果是,请编写代码以连接到备份服务器。
当你的代码有多个 java 异常要处理时,使用 if
和 else
循环的这种代码组织无效。
class connect{
if(Server Up){
//code to connect to server
}
else{
//code to connect to BACKUP server
}
}
try...catch
语法
Java 提供内置的特殊处理。
- 正常代码进入
try
块。 - 异常处理代码进入
catch
块
class connect {
try {
// code to connect to the server
}
catch {
// code to connect ot backup server
}
}
在我们的示例中,try
块将包含连接到服务器的代码。 catch
块将包含连接到备份服务器的代码。
如果服务器已启动,将忽略 catch
块中的代码。如果服务器关闭,则会引发异常,并且将执行 catch 块中的代码。
所以,这就是 Java 中处理异常的方式。
使用 try…catch 的语法
try{
statement(s)
}
catch (exceptiontype name){
statement(s)
}
例
步骤 1: 将以下代码复制到编辑器中
class JavaException {
public static void main(String args[]){
int d = 0;
int n = 20;
int fraction = n/d;
System.out.println("End Of Main");
}
}
步骤 2: 保存文件并编译代码。使用 java JavaException 命令运行程序
步骤 3: 算术异常 - 除以零如下所示,对于行#5 和行#6 从不执行
步骤 4: 现在让我们看看 try 和 catch 将如何帮助我们处理这个异常。我们将把导致代码行的异常放入 try
块,然后是 catch
块。将以下代码复制到编辑器中。
class JavaException {
public static void main(String args[]) {
int d = 0;
int n = 20;
try {
int fraction = n/d;
System.out.println("This line will not be Executed");
} catch (ArithmeticException e) {
System.out.println("In the catch Block due to Exception = " + e);
}
System.out.println("End Of Main");
}
}
步骤 5: 保存、编译和运行代码。你将获得以下输出
C:\workspace\java JavaException
In the catch clock due to Exception = java.lang.ArithmeticException: / by zero
End of main
如你所见,处理异常,并执行最后一行代码。另请注意,Line #7 将不会被执行,因为一旦异常被引发,控制流就会跳转到 catch 块。
注意: AritmeticException 对象 e
包含有关已发生的异常的信息,该异常可用于执行恢复操作。
Java 异常类层次结构
在执行一个 catch 语句之后,绕过其他语句,并在 try/catch
块之后继续执行。嵌套的 catch 块遵循 Exception 层次结构。
- Java 中的所有异常类都扩展了类
Throwable
。Throwable 有两个子类,Error 和 Exception - Error 类定义了我们的程序在正常情况下不会发生的异常或问题,例如内存错误、硬件错误、JVM 错误等
- Exception 类表示我们的程序可以处理的异常,我们的程序可以使用 try 和 catch 块从这个异常中恢复
- 运行时异常是异常类的子类。这些类型的异常表示在运行时发生的异常,并且在编译时无法跟踪。一个很好的例子是除零异常,或空指针异常等
- 在输入和输出操作期间生成 IO 异常
- 在多线程期间生成 Java 中断的异常。
**示例:**了解 try 和 catch 块的嵌套
步骤 1: 将以下代码复制到编辑器中。
class JavaException {
public static void main(String args[]) {
try {
int d = 1;
int n = 20;
int fraction = n/d;
int g[] = {
1
};
g[20] = 100;
}
/*catch(Exception e){
System.out.println("In the catch clock due to Exception = "+e);
}*/
catch (ArithmeticException e) {
System.out.println("In the catch clock due to Exception = " + e);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("In the catch clock due to Exception = " + e);
}
System.out.println("End Of Main");
}
}
步骤 2: 保存文件并编译代码。使用命令 java JavaException
运行程序。
步骤 3: 生成 ArrayIndexOutOfBoundsException
。将整数 d
的值更改为 0.保存,编译并运行代码。
步骤 4 生成了 ArithmeticException
。
步骤 5: 取消注释#10 行到#12 行。保存、编译和运行代码。
步骤 6 编译错误?这是因为 Exception 是 ArithmeticException 异常的基类。ArithmeticException 引发的任何 Exception 都可以由 Exception 类处理。因此,ArithmeticException 的 catch 块永远不会被执行,这使得它变得多余。因此编译错误。
Java finally 语句
无论 try 块中出现异常,都会执行 finally
语句。finally
是 try
语句的可选项。
try {
statement(s)
} catch (ExceptiontType name) {
statement(s)
} finally {
statement(s)
}
如果在 try 块中引发异常,则在执行 catch 块之后执行 finally 块。
例
步骤 1: 将以下代码复制到编辑器中。
class JavaException {
public static void main(String args[]){
try{
int d = 0;
int n =20;
int fraction = n/d;
}
catch(ArithmeticException e){
System.out.println("In the catch clock due to Exception = "+e);
}
finally{
System.out.println("Inside the finally block");
}
}
}
步骤 2: 保存、编译和运行代码。
步骤 3: 预期输出。最后,即使引发异常,也会执行块。
步骤 4: 更改变量 d = 1 的值。保存,编译并运行代码并观察输出。表单底部
摘要:
- 异常是运行时错误,它会中断程序执行的正常流程。执行程序期间的中断称为错误或异常。
- 错误分为两类
- 编译时间错误 - 语法错误,语义错误
- 运行时错误 - 异常
- 一个强大的程序应该处理所有异常并继续其正常的程序执行流程。Java 提供了一种内置的特殊处理方法
- 异常处理程序是一组处理异常的代码。可以使用 try&catch 在 Java 中处理异常。
try
语句:正常代码在此块上。catch
语句:如果正常代码中有错误,那么它将进入此块