Java中的异常处理是一种独特的方法,可以即兴发挥Java应用程序的便利性和性能。异常如果处理不当,可能会对应用程序造成实时严重威胁。
什么是异常?
异常是在程序的编译时或运行时可能发生的意外事件。它有足够的能力造成严重的潜在威胁,并破坏整个程序的流程。
现在您可能会想,一个错误做的事情是一样的,但它的不同之处要大得多。我们将在下一节中了解更多有关“错误”的信息。
什么是错误?
异常会扰乱任何可运行程序的正常流程。但错误是导致程序无法执行,有时还会崩溃的原因。
现在,错误可以定义如下。
错误可以被定义为计算机程序无法恢复的状态,并且停留在不可执行模式中,或者有时从正常执行中崩溃。
为了清楚地理解异常和错误,我们现在应该学习它们之间的区别。
错误与异常
既然我们对两者有了明确的区分和更好的理解,让我们继续学习Java中的异常层次结构。
异常层次结构
Java中的语法结构并不复杂。所有的错误和异常都是从名为'Throwable'的父类继承的。两个子类继承了throwable类。一个是Error类,另一个是Exception类。
现在,这两个类被更多的错误和异常进一步继承,如下图所示。
现在,我们对异常层次结构有了更好的了解,我们将简要了解异常的类型。为了获得更好的体验,让我们进入下一节,其中描述了各种类型的Java异常。
异常类型
从技术上讲,有两种类型的错误,第三种是错误。现将这些问题介绍如下。
已检查的异常
未检查的异常
错误
Checked Exceptions
直接从可抛出的父类继承所有异常(但运行时异常除外)的类称为检查异常。
Example:
SQL Exception and IOException
//code 1:
//Checked exception (unresolved)
package Exceptions;
import java.io.*;
public class Checked {
public static void main(String[] args) {
FileReader file = new FileReader("C:\\Users\\besthub\\Documents\\data.txt");
BufferedReader Input = new BufferedReader(file);
for (int c = 0; c < 3; c++)
System.out.println(Input.readLine());
Input.close();
}
}
//code 2:
//Checked exception (resolved)
package Exceptions;
import java.io.*;
public class Checked {
public static void main(String[] args) throws IOException {
FileReader file = new FileReader("C:\\Users\\besthub\\Documents\\data.txt");
BufferedReader Input = new BufferedReader(file);
for (int c = 0; c < 5; c++)
System.out.println(Input.readLine());
Input.close();
}
}
未检查的异常
仅继承运行时异常的类被称为未检查异常。
Example:
ArithmeticException and NullPointerException
//code:
Unchecked Exceptions(Resolved)
package Exceptions;
public class Unchecked {
public static void main(String args[]) {
int Ary[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
System.out.println(Ary[11]);
}
}
错误
导致整个应用程序崩溃的不可恢复事件称为错误。
Example:
OutOfMemoryError and AssertionError
有了这个,我们就对Java中不同类型的线程有了详细的了解。进一步,为了更精确地澄清两种主要类型的例外,我们将了解两者之间的明显差异。
已检查的异常与未检查的异常
下表帮助我们了解检查异常和未检查异常之间的区别。
这就是Java中检查异常和未检查异常之间的明显区别。更进一步,我们将学习在Java中执行异常处理过程所需的关键关键字。
Java中异常处理的关键字
以下是Java中异常处理过程中使用的主要关键字。
讨论了这些关键字后,让我们进入Java中异常处理的核心部分。我们将学习Java中的异常处理方法。
Java中的异常处理方法
Java中有两种异常处理方法。它们如下。
Java中的默认异常处理
Java中的用户定义异常处理
Java中的异常处理
Java虚拟机处理默认异常。编译器识别异常的存在,它迅速将识别的异常打包成对象的形式。
编译器在运行时将异常对象发送到JVM。此过程称为抛出异常。
引发异常后,可能会执行许多方法来响应引发的异常。该列表称为调用堆栈。调用堆栈如下所述。
抛出的异常到达调用堆栈,调用堆栈用可以处理抛出的异常的异常处理程序进行响应。
如果运行时系统无法识别引发的异常的适当异常处理程序,则运行时系统将异常对象发送到默认异常处理程序。
默认异常处理程序会导致异常输出,该输出会读出与异常遭遇相关的报告。
Java中的用户定义异常处理
Java中的自定义/用户定义的异常处理是通过使用异常处理关键字来管理的。它们是:
try
catch
throw
throws
finally
在自定义的异常处理中,用户应该在代码段的特定部分识别/预期异常。
一旦确定了异常的位置,代码块就应该包含在try和Catch块中。
在这种设置中,每当代码引发异常时,它都会由适当的Catch块处理。
关键字“throw”用于手动抛出异常。当程序抛出异常时,它由“throws”子句标识。
既然我们已经清楚了Java中的异常和异常处理过程,我们将直接处理Java中经常遇到的一些异常,并以编程的方式解决它们。
Java中的常见异常
以下是Java中异常处理过程中面临的一些常见异常。
ArrayIndexOutOfBound
当您尝试在数组位置中存储地址超过数组最大位置值的值时,会引发此异常。
Example:
//ArrayIndxOutOfBound
package Exceptions;
import java.util.Arrays;
import java.util.Scanner;
public class IndexOutOfBound {
public static void main(String args[]) {
int[] Array = {(int) 10.0,(int) 20.0,(int) 30.0,(int) 40.0,(int) 50.0};
System.out.println("The array elemens are as follows: \n");
System.out.println(Arrays.toString(Array));
Scanner scan = new Scanner(System.in);
System.out.println("Please provide the address of the required element:\n");
float numbers = scan.nextFloat();
System.out.println("Number at your selected address is "+Array[(int) numbers]);
}
}
NullPointer Exception
当您对空值执行数学运算时,会引发此异常。
Example:
//NullPointer
package Exceptions;
import java.util.Arrays;
import java.util.Scanner;
public class NullPointer {
private static String str;
public static void main(String[] args) {
str = "simplilearn";
foo(null);
bar(null);
}
static void foo(String abc) {
try {
System.out.println("First character in the string is:\n" + abc.charAt(0));
} catch (NullPointerException e) {
System.out.println("NullPointerException!");
}
}
static void bar(String abc) {
if (abc == null)
System.out.println("First character in the string is:\n " + abc.charAt(0));
else
System.out.println("NullPointerException!");
}
}
NumberFormat Exception
如果您尝试以错误的数字格式存储值,如不同的数据类型,则会引发此异常。
Example:
//NumberFormatted
package Exceptions;
public class NumFormat {
private static int num;
public static void main(String[] args) {
num = Integer.parseInt(null);
}
}
DividebyZero Exception
如果您尝试将一个数字除以零,则会引发此异常。
Example:
//Divide by zero
package Exceptions;
public class DBZ {
public static void main(String args[]) {
int n1, n2;
try {
n1 = 0;
n2 = 100 / n1;
System.out.println(n2);
} catch (ArithmeticException e) {
System.out.println("The divider cannot be zero, try a differnt number.");
} catch (Exception e) {
System.out.println("You cannot execute this program: DivideByZeroException");
}
}
}
到目前为止,我们已经在Java中处理了不同类型的异常和其他异常处理过程。在下一节中,我们将学习在Java中进行异常处理时需要遵循的最佳实践。
Java中异常处理的最佳实践
在我们了解了Java中经常遇到的异常之后,我们现在将了解在Java中实现异常处理过程时要遵循的最佳实践。
保守地使用异常
自定义异常
异常记录
早早抛出并失败
关闭资源
保守地使用异常
Exceptions have proven that they can be costly if used recklessly. We should use Boolean values to indicate the successful implementation of smaller operations.
自定义异常
这是一种在设计时定制异常而不是在旅途中计划它们的出色实践。
异常记录
当用户理解为什么会弹出一个特定的异常时,跟踪异常就变得很方便了。
早早抛出并失败
预计将尽早引发异常,并应以相同的速度解决该异常。
关闭资源
因为异常会停止整个程序,所以我们必须确保关闭系统资源以节省资源。
接下来的步骤
至此,我们已经结束了“Java中的异常处理”这篇文章。我们希望您喜欢学习Java中的接口的基本概念。
异常处理只是使用Java进行软件开发的关键概念之一。
评论