Computer >> Máy Tính >  >> Lập trình >> C ++

So sánh xử lý ngoại lệ trong C ++ và Java

Tính năng xử lý ngoại lệ có mặt ở hầu hết các ngôn ngữ hướng đối tượng ngày nay. Trong C ++ và Java, chúng ta cũng có thể nhận được loại tính năng này. Có một số điểm tương đồng giữa xử lý ngoại lệ trong C ++ và xử lý ngoại lệ trong Java, giống như trong cả hai ngôn ngữ, chúng ta phải sử dụng khối try-catch. Mặc dù cũng có một số khó khăn. Những thứ này giống như bên dưới -

Trong C ++, chúng ta có thể ném bất kỳ loại dữ liệu nào làm ngoại lệ. Bất kỳ kiểu dữ liệu nào cũng có nghĩa là các kiểu dữ liệu và con trỏ nguyên thủy. Trong Java, chúng ta chỉ có thể ném các đối tượng có thể ném được. Các lớp con của bất kỳ lớp nào có thể ném cũng sẽ có thể ném được.

Ví dụ

#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;
   }
}

Đầu ra

Exception Caught: thrown value is -5

Trong C ++, có một tùy chọn được gọi là bắt tất cả để bắt bất kỳ loại ngoại lệ nào. Cú pháp như sau -

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

Ví dụ

#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;
   }
}

Đầu ra

Exception Caught

Trong Java, nếu chúng ta muốn bắt bất kỳ loại ngoại lệ nào, chúng ta phải sử dụng lớp Exception. Đó là siêu lớp của bất kỳ ngoại lệ nào có trong Java, hoặc một số ngoại lệ do người dùng xác định cũng có. Cú pháp như sau -

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

C ++ không có khối cuối cùng. Nhưng trong Java có một khối đặc biệt được gọi là cuối cùng. Nếu chúng ta viết một số mã trong khối cuối cùng, nó sẽ được thực thi luôn. Nếu khối try được thực thi mà không có bất kỳ lỗi nào hoặc xảy ra ngoại lệ, khối cuối cùng sẽ được thực thi mọi lúc.

Đối với Java

Ví dụ

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...");
   }
}

Đầu ra

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