Java中的异常处理

Java中的异常处理是一种强大的机制,用于处理运行时错误,以便可以保持应用程序的正常流程。

在本教程中,我们将学习Java异常,它的类型以及已检查和未检查异常之间的区别。

什么是Java中的异常?

词典意义上:异常是一种异常情况。

在Java中,异常是中断程序正常流程的事件。它是在运行时抛出的对象。

什么是异常处理?

异常处理是一种处理运行时错误的机制,例如ClassNotFoundException、IOException、SQLException、RemoteException等。

异常处理的优点

异常处理的核心优点是保持应用程序的正常流程。异常通常会中断应用程序的正常流程,这就是为什么我们需要处理异常。让我们考虑一种情况:

statement 1;  
statement 2;  
statement 3;  
statement 4;  
statement 5;//发生异常  
statement 6;  
statement 7;  
statement 8;  
statement 9;  
statement 10;  

假设在Java程序中有10条语句,并且在第5条语句处发生了异常;其余的代码将不会被执行,即语句6到10将不会被执行。然而,当我们进行异常处理时,其余的语句将会被执行。这就是为什么我们在Java中使用异常处理的原因。

Java异常类的层次结构

java.lang.Throwable类是Java异常层次结构的根类,它被两个子类Exception和Error继承。Java异常类的层次结构如下所示:

1.png

Java异常的类型

主要有两种类型的异常:已检查异常和未检查异常。错误被视为未检查异常。然而,根据Oracle的说法,有三种类型的异常,即:

  1. 已检查异常
  2. 未检查异常
  3. 错误

已检查异常和未检查异常之间的区别

已检查异常

直接继承Throwable类的类,除了RuntimeException和Error之外的类,被称为已检查异常。例如,IOException、SQLException等。已检查异常在编译时进行检查。

未检查异常

继承RuntimeException的类被称为未检查异常。例如,ArithmeticException、NullPointerException、ArrayIndexOutOfBoundsException等。未检查异常在编译时不进行检查,但在运行时进行检查。

错误

错误是不可恢复的。一些错误的示例包括OutOfMemoryError、VirtualMachineError、AssertionError等。

Java异常关键字

Java提供了五个关键字用于处理异常。下表描述了每个关键字。

KeywordDescription
try“try”关键字用于指定我们应该放置异常代码的块。这意味着我们不能单独使用 try 块。try 块必须跟在 catch 或 finally 之后。
catch“catch”块用于处理异常。它前面必须有 try 块,这意味着我们不能单独使用 catch 块。后面可以跟着 finally 块。
finally“finally”块用于执行程序的必要代码。无论是否处理异常都会执行。
throw“throw”关键字用于抛出异常。
throws“throws”关键字用于声明异常。它指定方法中可能会发生异常。它不会抛出异常。它总是与方法签名一起使用。

Java异常处理示例

让我们看一个Java异常处理的示例,其中我们使用try-catch语句来处理异常。

JavaExceptionExample.java

public class JavaExceptionExample{  
  public static void main(String args[]){  
   try{  
      //可能引发异常的代码
      int data=100/0;  
   }catch(ArithmeticException e){System.out.println(e);}  
   //程序的其余代码   
   System.out.println("rest of the code...");  
  }  
}  

输出:

Exception in thread main java.lang.ArithmeticException:/ by zero
rest of the code...

在上面的示例中,100/0引发了一个ArithmeticException异常,该异常被try-catch块处理。

Java异常的常见场景

以下是一些可能发生未检查异常的场景:

1.发生ArithmeticException的场景

如果我们将任何数字除以零,就会发生ArithmeticException。

int a=50/0;//算术异常

2.发生NullPointerException的场景

如果我们的变量中有一个空值,在该变量上执行任何操作都会引发NullPointerException。

String s=null;  
System.out.println(s.length());//空指针异常

3.发生NumberFormatException的场景

如果变量或数字的格式不匹配,可能会导致NumberFormatException。假设我们有一个包含字符的字符串变量;将此变量转换为数字将引发NumberFormatException。

String s="abc";  
int i=Integer.parseInt(s);//数字格式异常  

4.发生ArrayIndexOutOfBoundsException的场景

当数组超过其大小时,会发生ArrayIndexOutOfBoundsException。还可能有其他原因导致ArrayIndexOutOfBoundsException。请考虑以下语句。

int a[]=new int[5];  
a[10]=50; //ArrayIndexOutOfBoundsException异常

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想