C++ 和 JAVA 的异常处理

2024 年 8 月 28 日 | 3 分钟阅读

1. 在 C++ 中,任何类型(包括基本类型和指针)都可以抛出异常。然而,在 Java 中,只有可抛出对象(Throwable 类的任何子类的实例)才能作为异常抛出。例如,以下代码在 C++ 中有效,但在 Java 中无效。

C++

输出

Exception occurred: thrown value is -1

2. C++ 中有一个特殊的捕获机制,称为“捕获所有”,可以捕获所有类型的异常。

C++

输出

Exception occurred: exiting 

实际上,我们可以使用 Java 中的捕获 Exception 对象来捕获所有类型的异常。因为我们通常不捕获 Exception(s) 以外的 Throwable(s)(它们是 Error)

3. Finally 是 Java 中的一个代码块,它总是在 try-catch 块之后执行。此代码块可用于执行清理任务。在 C++ 中,没有这样的代码块。

JAVA

输出

Got the Test Exception
Inside finally block 

4. C++ 中的所有异常都是未检查的。Java 中有两种异常:已检查异常和未检查异常。有关已检查异常和未检查异常的更多信息,请参阅此处。

5. 在 Java 中,使用新关键字 throws 来列出函数可以抛出的异常。C++ 中没有 throws 关键字,因此改用关键字 throw。

6. 如果 C++ 中未捕获异常,则异常处理子系统会调用 unexpected() 函数,这会导致程序或应用程序异常终止。如果我们的 C++ 程序中发生异常,定位该异常非常耗时,因为 C++ 的 unexpected() 不会告诉我们异常发生的类型或行号。有关 unexpected() 的更多信息,请参阅此内容。

然而,在 Java 中,如果系统生成的异常未被捕获,Java 运行时系统 (JVM) 会将异常对象传递给默认异常处理程序,该处理程序会打印异常的名称、描述和发生异常的行号。因此,Java 中查找和处理异常比 C++ 更简单。

异常处理 Java 与 C++:有什么区别?

Java 和 C++ 之间的区别如下。

JAVAC++
作为异常,只能抛出可抛出对象。任何类型的异常都可以抛出。
我们可以使用 Exception 对象来捕获各种类型的异常。因为我们通常不捕获 Exception(s) 以外的 Throwable(s)。
一种称为“捕获所有”的特殊捕获机制可以捕获所有类型的异常。在 try-catch 块之后,一个名为 finally 的特殊块总是执行。在 C++ 中,没有这样的块。
异常分为两种类型:已检查异常和未检查异常。所有异常都未被检查。
Throws 是一个特殊关键字,用于列出函数可以抛出的异常。关键字 throw 用于指定函数可能抛出的异常。
在 Java 中,查找和处理异常得到了简化。在 C++ 中,查找和处理异常是一项困难的任务。