个性化阅读
专注于IT技术分析

Java中的异常处理

本文概述

Java中的异常处理是处理运行时错误的强大机制之一, 因此可以维护应用程序的正常流程。

在此页面中, 我们将学习Java异常, 其类型以及已检查和未检查的异常之间的区别。

Java中的异常是什么

词典的含义:异常是一种异常情况。

在Java中, 异常是指破坏程序正常流程的事件。它是在运行时引发的对象。


什么是异常处理

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

异常处理的优势

异常处理的核心优势是保持应用程序的正常流程。异常通常会中断应用程序的正常流程, 这就是我们使用异常处理的原因。让我们来一个场景:

statement 1;
statement 2;
statement 3;
statement 4;
statement 5;//exception occurs
statement 6;
statement 7;
statement 8;
statement 9;
statement 10;

假设你的程序中有10条语句, 并且在语句5处发生异常, 则其余代码将不会执行, 即语句6至10将不会执行。如果我们执行异常处理, 则语句的其余部分将被执行。这就是为什么我们在Java中使用异常处理。

你知道吗?

Java异常类的层次结构

java.lang.Throwable类是Java异常层次结构的根类, 它由两个子类继承:异常和错误。 Java异常类的层次结构如下:

异常处理的层次结构

Java异常类型

主要有两种类型的异常:选中和未选中。在这里, 错误被视为未检查的异常。根据Oracle, 有三种类型的异常:

  1. 检查异常
  2. 未经检查的异常
  3. 错误
Java异常类型

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

1)检查异常

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

2)未检查的异常

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

3)错误

错误是无法恢复的, 例如OutOfMemoryError, VirtualMachineError, AssertionError等。


Java异常关键字

Java中有5个关键字用于处理异常。

关键词 描述
try “ try”关键字用于指定应在其中放置异常代码的块。在try块之后必须是catch或finally。这意味着, 我们不能单独使用try块。
catch “ catch”块用于处理异常。它必须在try块之前, 这意味着我们不能单独使用catch块。之后可以稍后再进行阻止。
finally “最终”块用于执行程序的重要代码。无论是否处理异常都将执行。
throw “ throw”关键字用于引发异常。
throws “ throws”关键字用于声明异常。它不会引发异常。它指定方法中可能发生异常。它始终与方法签名一起使用。

Java异常处理示例

让我们看一个Java异常处理的例子, 在这里我们使用try-catch语句来处理异常。

public class JavaExceptionExample{
  public static void main(String args[]){
   try{
      //code that may raise exception
      int data=100/0;
   }catch(ArithmeticException e){System.out.println(e);}
   //rest code of the program 
   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;//ArithmeticException

2)发生NullPointerException的情况

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

String s=null;
System.out.println(s.length());//NullPointerException

3)发生NumberFormatException的情况

任何值的格式错误都可能发生NumberFormatException。假设我有一个包含字符的字符串变量, 将此变量转换为数字将发生NumberFormatException。

String s="abc";
int i=Integer.parseInt(s);//NumberFormatException

4)发生ArrayIndexOutOfBoundsException的情况

如果在错误的索引中插入任何值, 则将导致ArrayIndexOutOfBoundsException, 如下所示:

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

Java异常索引

  1. Java Try-Catch块
  2. Java多重捕获块
  3. Java嵌套尝试
  4. Java的最终块
  5. Java投掷关键字
  6. Java异常传播
  7. Java抛出关键字
  8. Java投掷vs投掷
  9. Java Final vs Final vs Finalize
  10. 具有方法覆盖的Java异常处理
  11. Java自定义异常
赞(0)
未经允许不得转载:srcmini » Java中的异常处理

评论 抢沙发

评论前必须登录!