异常处理 Java

什么是异常 Java?

异常在 Java 是中断程序指令执行并扰乱程序正常执行流程的事件。它是一个包装方法内发生的错误事件信息的对象,并传递给运行时系统。在 Java,异常主要用于指示不同类型的错误情况。

错误有两种类型:

  1. 编译时错误
  2. 运行时错误

编译时错误可以再次分为两类:

  • 语法错误
  • 语义错误

语法错误示例:

而不是声明 int a; 你错误地将其声明为 in a; 编译器将会抛出错误。

例如:您已声明一个变量 int a; 几行代码之后你再次声明一个整数为 int a;。编译代码时,所有这些错误都会突出显示。

运行时错误示例

运行时错误称为 例外 错误。任何中断程序正常执行流程的事件。异常的例子有算术异常、空指针异常、除以零异常等。 Java 是开发人员无法控制的事情。

点击 点击这里 如果视频无法访问

为什么我们需要异常?

假设你编写了一个程序来访问服务器。在开发代码时一切运行正常。

Java 异常处理

在实际生产运行期间,服务器宕机。当你的程序尝试访问它时,会引发异常。

Java 异常处理

如何处理异常

到目前为止,我们已经看到,异常超出了开发人员的控制范围。但将代码故障归咎于环境问题并不是解决办法。您需要一种能够处理异常情况的稳健编程。这种代码称为 异常处理程序。

在我们的示例中,良好的异常处理是,当服务器关闭时,连接到备份服务器。

Java 异常处理

要实现这一点,请输入代码以连接到服务器(使用传统的 if 和 else 条件)。您将检查服务器是否已关闭。如果是,请编写代码以连接到备份服务器。当您的代码有多个时,这种使用“if”和“else”循环的代码组织并不有效 Java 异常 处理。

class connect{
	if(Server Up){
	 // code to connect to server
	}
	else{
	 // code to connect to BACKUP server
	}
}

Try Catch 块

Java 提供内置的特殊处理。

  1. 正常代码进入 TRY 块。
  2. 异常处理代码进入 CATCH 阻止

Try Catch 块

在我们的示例中,TRY 块将包含用于连接服务器的代码。CATCH 块将包含用于连接备份服务器的代码。如果服务器已启动,则 CATCH 块中的代码将被忽略。如果服务器已关闭,则将引发异常,并执行 catch 块中的代码。

Try 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 运行程序 Java特殊课程

步骤3) 算术异常 - 第 5 行显示除以零,而第 6 行从未执行

步骤4) 现在让我们看看 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) 保存、编译并运行代码。您将获得以下输出

Try Catch 块

如您所见,异常已处理,最后一行代码也已执行。另外,请注意,第 7 行将不会执行,因为 一旦引发异常,控制流就会跳转到 catch 块。

请注意: AritmeticException 对象“e”携带有关已发生的异常的信息,这些信息对于采取恢复措施很有用。

Java 异常类层次结构

执行完一个 catch 语句后,其他 catch 语句将被绕过,并在 try/catch 块后继续执行。嵌套的 catch 块遵循异常层次结构。


Java 异常层次结构

  • 所有异常类 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 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的 Java特殊课程.

步骤3) 生成 ArrayIndexOutOfBoundsException。将 int d 的值更改为 0。保存、编译并运行代码。

第一步)必须生成一个ArithmeticException。

步骤5) 取消注释第 10 行至第 12 行。保存、编译并运行代码。

步骤6) 编译错误? 这是因为 Exception 是 ArithmeticException Exception 的基类。任何由 ArithmeticException 引发的异常都可以由 Exception 类处理。因此 ArithmeticException 的 catch 块将永远没有机会被执行,这使其变得多余。因此会出现编译错误。

Java 最终块

finally 块是 无论是否引发异常都执行 在 try 块中。它是 可选 与 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。保存、编译并运行代码并观察输出。表单底部

结语

  • An 异常是运行时错误 它会中断程序执行的正常流程。程序执行过程中的中断称为错误或异常。
  • 错误分为两类
    • 编译时错误——语法错误、语义错误
    • 运行时错误-异常
  • A 健壮的程序应该处理所有异常 并继续正常程序执行流程。 Java 提供内置异常处理方法
  • 异常处理程序是一组代码, 处理异常. 异常可以处理在 Java 使用 try & catch。
  • 尝试阻止:此块上执行正常代码。
  • 挡块:如果正常代码有错误,则进入此块