Java 中的默认异常17 Mar 2025 | 5 分钟阅读 Java 中的异常处理是处理运行时错误的一种有效方法,可以保留应用程序的正常流程。Java 异常处理是一种处理运行时错误(如 ClassNotFoundException、IOException、SQLException、RemoteException 等)的机制。 在 Java 中,异常是在程序执行期间(即运行时)发生的、中断程序指令正常流程的、不希望发生或意外的事件。异常可以被程序捕获和处理。当一个方法中发生异常时,它会创建一个对象。这个对象称为异常对象。它包含有关异常的信息,例如异常的名称和描述以及异常发生时程序的 P> 状态。 为什么会发生异常?
错误代表不可恢复的情况,例如 Java 虚拟机 (JVM) 内存不足、内存泄漏、堆栈溢出错误、库不兼容、无限递归等。错误通常超出了程序员的控制范围,我们不应该尝试处理错误。 异常层次结构所有异常和错误类型都是类 Throwable 的子类,Throwable 是该层次结构的基类。一个分支由 Exception 引导。此类用于用户程序应捕获的异常情况。NullPointerException 是此类异常的一个示例。另一个分支 Error 由 Java 运行时系统 (JVM) 用于指示与运行时环境本身 (JRE) 相关的错误。StackOverflowError 是此类错误的示例。 ![]() 让我们来讨论上面列出的异常,如下所示 1. 内置异常 内置异常是 Java 库中提供的异常。这些异常适合解释某些错误情况。 2. 检查型异常 检查型异常称为编译时异常,因为这些异常在编译时由编译器检查。 3. 运行时异常 运行时异常与检查型异常正好相反。编译器不会在编译时检查这些异常。简单来说,如果一个程序抛出一个运行时异常,即使我们没有处理或声明它,程序也不会给出编译错误。 4. 用户自定义异常 有时,Java 中的内置异常无法描述特定情况。在这种情况下,用户也可以创建异常,称为用户自定义异常。 Java 中异常处理的优点如下
打印异常消息的方法1. printStackTrace() 方法该方法以 异常名称: 异常描述, P> 堆栈跟踪 的格式打印异常信息。 Exception.java 输出 java.lang.ArithmeticException: / by zero at Exception.main(File.java:10) 2. toString() 方法toString() 方法以 异常名称: 异常描述 的格式打印异常信息。 ToString.java 输出 java.lang.ArithmeticException: / by zero 3. getMessage() 方法getMessage() 方法仅打印异常的描述。 GetMessage.java 输出 Zero 默认异常处理默认异常处理程序是在未被调用堆栈中的任何异常处理程序捕获的情况下抛出异常时调用的方法。 当方法内发生异常时,该方法会创建一个称为异常对象的对象,并将其交给运行时系统 (JVM)。异常对象包含异常的名称和描述以及异常发生的程序 P> 的当前状态。创建异常对象并在运行时系统中处理它称为抛出异常。可能有一个列表,列出了调用到发生异常的方法的方法。这个有序的方法列表称为调用堆栈。现在将发生以下过程。
默认异常处理程序定义在 ThreadGroup 类中,其 P> 签名如下 public void uncaughtException(Thread t, Throwable e) uncaughtException() 方法接受两个参数
默认异常处理程序仅将异常类名、异常描述和堆栈跟踪打印到控制台,然后异常终止程序。 这是默认异常示例。 DefaultException.java 输出 Uncaught exception in thread Thread-0 Something went wrong! [Ljava.lang.StackTraceElement;@1d251891 Java 中的默认异常在异常处理中起着至关重要的作用,但既有好处也有需要考虑的 P> 弊端。 默认异常的优点简单性 未捕获的异常会自动传播到调用堆栈的 P> 上方,除了默认行为之外,无需显式处理。这对于简单的程序或原型可能很有用。 健壮性 默认异常处理可防止程序默默忽略潜在的关键错误,从而迫使开发人员在某个时候解决它们。 清晰的错误报告 默认处理程序会打印堆栈跟踪,为调试和识别问题 P> 根源提供有价值的信息。 缺点 不可预测性 未经控制的传播可能导致程序意外终止,使调试更具挑战性。 信息有限 线程中的默认异常...消息提供了基本信息,但 P> 缺乏有关具体错误原因的详细信息。 缺乏自定义 默认处理不 P> 提供根据不同类型的异常量身定制响应的机会,这可能会影响用户体验或数据 P> 完整性。 |
在 Java 中,Callable 和 Future 是与线程一起使用的两个最重要的概念。在本节中,我们将了解如何在代码中使用 Callable 和 Future。Future 用于存储从不同线程接收到的结果,而 Callable 是...
阅读9分钟
在 Java 中不使用循环打印数字通常涉及替代技术,例如递归或流处理。在本节中,我们将讨论在 Java 中不使用传统循环打印数字 1 到 100 的方法。递归和 Java Stream 都提供了替代……
5 分钟阅读
由于强大的继承系统,Java 中的一个类可以通过继承另一个类的特征和行为。在处理继承时,构造函数对于初始化对象和维护类的正确运行至关重要。在本节中,我们将探讨构造函数的功能……
阅读 4 分钟
为了在 Java 中读取和写入 JSON 数据,我们使用 org.json 库。org.json 库允许我们在 Java 中编码和解码 JSON 数据。org.json 类提供了几个重要类,通过这些类我们可以对其 JSON 数据执行多项操作。这些...
阅读 3 分钟
在本节中,我们将创建一个 Java 程序,该程序将给定的数字转换为单词。例如,如果给定的数字是 54,297,则输出应为 Fifty-Four Thousand Two Hundred Ninety-Seven。让我们为它创建一个 Java 程序。NumberToWordExample1.java class NumberToWordExample1 { // 用户定义的静态方法...
阅读9分钟
在 Java 18 中,引入了 snippet 标签来解决 code 标签的缺点。Java 18 以新功能的形式在 Java 的 API 文档中添加了代码片段。JavaDoc 的标准 Doclet 在 Java 中包含 @snippet 标签,并且它...
阅读 3 分钟
Java 8 中首次发布的 Stream API 可用于处理对象集合。流是项目的集合,可以通过各种方式进行管道化以获得不同的结果。Java Stream 的特点是:作为接收输入的替代...
阅读 8 分钟
?图像压缩允许我们在不显著影响视觉质量的情况下减小图像文件的大小。有两种压缩类型。首先,我们使用有损压缩来接受降低的图像质量,同时实现更小的文件大小。例如,我们有...
5 分钟阅读
在数论中,没有什么比 Hardy-Ramanujan 定理更迷人的了。它展示了数字在素因子方面的分布有多么真实。Hardy 在 1917 年基于 Srinivasa Ramanujan 的观察讨论了该定理,该定理认为 ω(n) = 个数...
5 分钟阅读
Java 接口变量 Java 接口提供了一种定义类实现契约或蓝图的方法。除了方法,接口还可以包含变量。这些变量称为接口变量或常量。请注意,接口变量是 public、static 和 final 的,由...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India