在 Java 中尝试 Catch:异常处理示例
什么是 Java 中的异常?
Java 中的异常 是中断程序指令执行并扰乱程序正常执行流程的事件。它是一个对象,它包装了方法中发生的错误事件信息,并将其传递给运行时系统。在Java中,异常主要用于指示不同类型的错误情况。
在本教程中,您将学习-
- 什么是异常?
- 为什么我们需要异常?
- 如何处理异常
- 试试 Catch 块
- Java 异常类层次结构
- Java 最终阻塞
有两种类型的错误:
- 编译时错误
- 运行时错误
编译时错误又可以再次分为两类:
- 语法错误
- 语义错误
语法错误示例:
而不是声明 int a;
您错误地将其声明为 in a;
哪个编译器会抛出错误。
示例:您声明了一个变量 int a;
在几行代码之后,您再次将整数声明为 int a;
.编译代码时会突出显示所有这些错误。
运行时错误示例
运行时错误称为 Exceptions 错误。它是任何中断程序正常执行流程的事件。
异常示例有算术异常、Nullpointer 异常、除以零异常等。
Java 中的异常是开发人员无法控制的。
如果视频无法访问,请单击此处
为什么我们需要异常?
假设您编写了一个程序来访问服务器。开发代码时一切正常。
在实际生产运行期间,服务器已关闭。当您的程序尝试访问它时,会引发异常。
如何处理异常
到目前为止,我们已经看到,异常超出了开发人员的控制范围。但是将代码失败归咎于环境问题并不是解决方案。你需要一个健壮的编程,它可以处理特殊情况。这样的代码称为异常处理程序。
在我们的示例中,良好的异常处理是,当服务器关闭时,连接到备用服务器。
要实现这一点,请输入您的代码以连接到服务器(使用传统的 if 和 else 条件)。
您将检查服务器是否已关闭。如果是,请编写代码连接到备份服务器。
当您的代码有多个 java 异常需要处理时,这种使用“if”和“else”循环的代码组织是无效的。
class connect{ if(Server Up){ // code to connect to server } else{ // code to connect to BACKUP server } }
尝试捕获块
Java 提供了内置的异常处理。
- 普通代码进入 TRY 阻止。
- 异常处理代码进入CATCH 阻止
在我们的示例中,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 步) 保存,编译并运行代码。您将得到以下输出
如您所见,异常被处理,最后一行代码也被执行。另外,请注意第 7 行将不会执行,因为一旦引发异常,控制流就会跳转到 catch 块。
注意: AritmeticException 对象“e”携带有关已发生异常的信息,这对于采取恢复操作很有用。
Java 异常类层次结构
在一个 catch 语句执行后,其他语句被绕过,在 try/catch 块之后继续执行。嵌套的 catch 块遵循 Exception 层次结构。
- Java 中的所有异常类都扩展了“Throwable”类。 Throwable 有两个子类,Error 和 Exception
- Error类定义了我们的程序在正常情况下不会发生的异常或问题,例如内存错误、硬件错误、JVM错误等
- Exception 类表示我们的程序可以处理的异常,我们的程序可以使用 try 和 catch 块从这个异常中恢复
- 运行时异常是异常类的子类。这些类型的 Exception 表示在运行时发生并且在编译时无法跟踪的异常。一个很好的例子是除以零异常或空指针异常等
- 输入输出操作时产生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 block due to Exception = "+e); }*/ catch (ArithmeticException e) { System.out.println("In the catch block due to Exception = " + e); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("In the catch block due to Exception = " + e); } System.out.println("End Of Main"); } }
步骤 2) 保存文件并编译代码。使用命令运行程序,java JavaException .
步骤 3) 将生成 ArrayIndexOutOfBoundsException。将 int d 的值更改为 0。保存、编译并运行代码。
第 4 步 ) 必须生成 ArithmeticException。
第 5 步) 取消注释第 10 行到第 12 行。保存、编译并运行代码。
第 6 步) 编译错误? 这是因为 Exception 是 ArithmeticException Exception 的基类。 ArithmeticException 引发的任何异常也可以由 Exception 类处理。因此 ArithmeticException 的 catch 块永远不会有机会被执行,这使得它变得多余。因此编译错误。
Java 最终阻塞
无论是否引发异常,都会执行 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 block due to Exception = "+e); } finally{ System.out.println("Inside the finally block"); } } }
步骤 2) 保存、编译和运行代码。
步骤 3) 预期输出。即使引发了异常,也会执行 finally 块。
步骤 4) 更改变量d =1的值。保存,编译并运行代码并观察输出。Form的底部
总结 :
- 异常是运行时错误 中断程序执行的正常流程。程序执行期间的中断称为错误或异常。
- 错误分为两类
- 编译时错误——语法错误、语义错误
- 运行时错误 - 异常
- 健壮的程序应该处理所有异常 并继续其正常的程序执行流程。 Java 提供了内置的异常处理方法
- 异常处理程序是一组处理异常的代码 .在 Java 中可以使用 try &catch 处理异常。
- 尝试阻止 :普通代码在这个块上。
- 捕获块 :如果正常代码有错误,就会进入这个block
java