C++ 和 Java 中异常处理的比较


异常处理功能现在几乎存在于任何面向对象的语言中。在 C++ 和 Java 中,我们也可以获得这种功能。C++ 中的异常处理和 Java 中的异常处理之间存在一些相似之处,例如,在这两种语言中,我们都必须使用 try-catch 块。尽管也存在一些差异。这些差异如下所示:

在 C++ 中,我们可以抛出任何类型的作为异常的数据。任何类型的数据意味着基本数据类型和指针。在 Java 中,我们只能抛出可抛出对象。任何可抛出类的子类也可以抛出。

示例

 在线演示

#include <iostream>
using namespace std;
int main() {
   int x = -5;
   try { //protected code
      if( x < 0 ) {
         throw x;
      }
   }
   catch (int x ) {
      cout << "Exception Caught: thrown value is " << x << endl;
   }
}

输出

Exception Caught: thrown value is -5

在 C++ 中,有一个名为 catch all 的选项可以捕获任何类型的异常。语法如下:

try {
   //protected code
} catch(…) {
   //catch any type of exceptions
}

示例

 在线演示

#include <iostream>
using namespace std;
int main() {
   int x = -5;
   char y = 'A';
   try { //protected code
      if( x < 0 ) {
         throw x;
      }
      if(y == 'A') {
         throw y;
      }
   }
   catch (...) {
      cout << "Exception Caught" << endl;
   }
}

输出

Exception Caught

在 Java 中,如果我们想捕获任何类型的异常,则必须使用 Exception 类。它是 Java 中任何异常或某些用户定义异常的超类。语法如下:

try {
   //protected code
} catch(Exception e) {
   //catch any type of exceptions
}

C++ 没有 finally 块。但在 Java 中,有一个特殊的块称为 finally。如果我们在 finally 块中编写一些代码,它将始终被执行。如果 try 块在没有错误的情况下执行,或者发生异常,finally 块将始终被执行。

Java 在线演示

示例

 在线演示

public class HelloWorld {
   public static void main(String []args) {
      try {
         int data = 25/5;
         System.out.println(data);
      } catch(NullPointerException e) {
         System.out.println(e);
      } finally {
         System.out.println("finally block is always executed");
      }
      System.out.println("rest of the code...");
   }
}

输出

5
finally block is always executed
rest of the code...

更新于: 2019-07-30

208 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告