c++与Java异常处理的比较

c++与Java异常处理的比较

两种语言都用于尝试、接住和扔出 __ 异常处理的关键字,它们的含义在两种语言中也是相同的。

以下是Java和c++异常处理的区别:

Java c++
只有可抛出的对象可以作为异常抛出。 所有类型都可以作为异常抛出。
我们可以捕获Exception对象来捕获各种异常。因为通常我们不会捕获Throwable(s),除了Exception(s)。 有一种特殊的捕获方法称为“catch all”,它可以捕获所有类型的异常。
一个名为finally的特殊块总是在try-catch块之后执行。 在c++中没有这样的块。
有两种类型的异常—已检查的和未检查的。 所有异常都未检查。
特殊的关键字throws用于列出函数可能抛出的异常。 关键字throw用于列出函数可能抛出的异常。
在Java中查找和处理异常更容易。 在c++中查找和处理异常是相当困难的。

以下将详细讨论上述各点:

1) 在c++中,所有类型(包括原语和指针)都可以作为异常抛出。但是在Java中,只有可抛出对象(throwable对象是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 <iostream>
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中,出于各种实际目的,我们可以捕获Exception对象来捕获各种异常。因为通常我们不会捕获Throwable(s),除了Exception(s)(也就是错误)

catch(Exception e){
 …….
}

3)在Java中,有一个名为finally的块 __ 它总是在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++语言中更容易。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程