C++ 和JAVA 中的异常处理
1. 在C++中,可以抛出任何类型的异常(包括基本类型和指针)。然而,在Java中,只能抛出可抛对象(Throwable类的任何子类的实例)作为异常。示例,下面的代码在C++中可以工作,但在Java中不行。
// CPP Program to demonstrate all types (including primitive
// and pointer) can be thrown as exception.
#include <iostream>
using namespace std;
int main()
{
int x = -1;
// some other stuff
try {
// some other stuff
if (x < 0) {
throw x;
}
}
catch (int x) {
cout << "Exception occurred: thrown value is " << x
<< endl;
}
getchar();
return 0;
}
输出
Exception occurred: thrown value is -1
2. 在C++中有一个特殊的catch叫做”catch all”,它可以捕获所有类型的异常。
// CPP Program to demonstrate catch all
#include
using namespace std;
int main()
{
int x = -1;
char* ptr;
ptr = new char[256];
try {
if (x < 0) {
throw x;
}
if (ptr == NULL) {
throw " ptr is NULL ";
}
}
catch (...) // catch all
{
cout << "Exception occurred: exiting " << endl;
exit(0);
}
getchar();
return 0;
}
输出
Exception occurred: exiting
对于实际的目的来说,我们可以在Java中使用catch Exception对象来捕获所有类型的异常。因为我们通常不会捕获除了Exception(错误)之外的Throwable(错误)。
catch(Exception e){
.......
}
3. 最后是一个在Java中总是在try-catch块之后执行的块。这个块可以用来执行清理任务。在C++中,没有这样的块。
// Java Program to demonstrate creating an exception type
class Test extends Exception {
}
class Main {
public static void main(String args[])
{
try {
throw new Test();
}
catch (Test t) {
System.out.println("Got the Test Exception");
}
finally {
System.out.println("Inside finally block ");
}
}
}
输出
Got the Test Exception
Inside finally block
4. 在C++中,所有的异常都是未经检查的。在Java中有两种异常:检查异常和未经检查的异常。关于检查异常和未经检查的异常的更多信息可以在这里找到。
5. 在Java中,使用新关键字throws来列出一个函数可能抛出的异常。在C++中没有throws关键字,所以使用throw关键字。
6. 如果在C++中未捕获异常,则异常处理子系统调用函数unexpected(),导致程序或应用程序异常终止。如果在我们的C++程序中发生异常,查找该异常是耗时的,因为C++的unexpected()不告诉我们异常发生的类型或行。详细信息请参阅这里。
然而,在Java中,如果系统生成的异常未被捕获,Java运行时系统(JVM)将异常对象传递给默认的异常处理程序,该程序将打印异常发生的名称、描述和行号。因此,Java中查找和处理异常比C++简单。
Java和C++异常处理的差异是什么
以下列出了Java和C++之间的差异。
JAVA | C++ |
---|---|
作为异常,只能抛出可抛出的对象。 | 可以抛出任何类型的异常。 |
我们可以使用异常对象来捕获各种类型的异常。 | 因为我们通常不会捕获除了异常之外的可抛出对象。 |
一个特殊的catch称为“catch all”可以捕获所有类型的异常。 | 在try-catch块之后,总是会执行一个特殊的块,称为finally。在C++中没有这样的块。 |
异常分为两种类型:可检查和不可检查。 | 所有异常都被设为不可检查。 |
Throws是一个特殊的关键字,用于列出一个函数可能抛出的异常。 | 关键字throw用于指定一个函数可能抛出的异常。 |
在Java中,查找和处理异常变得简化。 | 在C++中,查找和处理异常是一项困难的任务。 |