Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++ 및 Java의 예외 처리 비교

<시간/>

예외 처리 기능은 오늘날 거의 모든 객체 지향 언어에 있습니다. C++ 및 Java에서도 이러한 종류의 기능을 얻을 수 있습니다. C++의 예외 처리와 Java의 예외 처리 사이에는 몇 가지 유사점이 있습니다. 두 언어 모두 try-catch 블록을 사용해야 하는 것과 같습니다. 약간의 어려움도 있지만. 다음과 같습니다 -

C++에서는 모든 유형의 데이터를 예외로 throw할 수 있습니다. 모든 유형의 데이터는 원시 데이터 유형과 포인터도 의미합니다. 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하는 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가 항상 실행됩니다.

자바용

예시

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...