本文概述
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)检查异常
除了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异常索引
- Java Try-Catch块
- Java多重捕获块
- Java嵌套尝试
- Java的最终块
- Java投掷关键字
- Java异常传播
- Java抛出关键字
- Java投掷vs投掷
- Java Final vs Final vs Finalize
- 具有方法覆盖的Java异常处理
- Java自定义异常
评论前必须登录!
注册