C++ 和JAVA 中的异常处理

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++中,查找和处理异常是一项困难的任务。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程