Java에서 예외 처리는 애플리케이션의 일반적인 흐름이 보존될 수 있도록 런타임 오류를 처리하는 효과적인 방법 중 하나입니다. NullPointerException ArrayIndexOutOfBoundsException 등과 같은 런타임 오류를 처리합니다. 이러한 오류를 효과적으로 처리하기 위해 Java는 두 개의 키워드 throw 및 throw를 제공합니다.
자바 던지기
Java의 throw 키워드는 메서드나 코드 블록에서 명시적으로 예외를 발생시키는 데 사용됩니다. 우리는 확인된 예외나 확인되지 않은 예외를 던질 수 있습니다. throw 키워드는 주로 사용자 정의 예외를 발생시키는 데 사용됩니다.
통사론:
던지다 사례
여기서 인스턴스는 Throwable 유형(또는 Exception과 같은 하위 클래스)의 객체입니다.
예:
throw new ArithmeticException('/ by 0');
하지만 이 예외는 즉 인스턴스가 유형이어야 함을 의미합니다. 던질 수 있는 또는 하위 클래스 던질 수 있는 .
프로그램 실행 흐름은 throw 문이 실행되고 가장 가까운 엔클로저가 실행된 직후에 중지됩니다. 노력하다 블록이 있는지 확인하기 위해 검사됩니다. 잡다 예외 유형과 일치하는 명령문입니다. 제어된 일치 항목을 찾으면 해당 명령문으로 전송되고, 그렇지 않으면 다음으로 묶습니다. 노력하다 블록이 검사되는 등의 작업이 수행됩니다. 일치하지 않는 경우 잡다 발견되면 기본 예외 처리기가 프로그램을 중단합니다.
URI 대 URL
예: 이 예제는 메서드 내에서 예외가 발생하고 다시 발생하는 위치를 보여줍니다.
Javaclass Geeks { static void fun() { try { throw new NullPointerException('demo'); } catch (NullPointerException e) { System.out.println('Caught inside fun().'); throw e; // rethrowing the exception } } public static void main(String args[]) { try { fun(); } catch (NullPointerException e) { System.out.println('Caught in main.'); } } }
산출
Caught inside fun(). Caught in main.
설명: 위의 예에서는 throw 키워드를 사용하여 명시적으로 NullPointerException을 발생시키는 방법을 보여줍니다. 예외는 내부에서 발견됩니다. 재미있는() 메소드를 호출하고 main() 메소드에 잡힌 위치에 다시 던져집니다.
예: 이 예에서는 산술 예외를 보여줍니다.
Java// Throwing an arithmetic exception class Geeks { public static void main(String[] args){ int numerator = 1; int denominator = 0; if (denominator == 0) { // Manually throw an ArithmeticException throw new ArithmeticException('Cannot divide by zero'); } else { System.out.println(numerator / denominator); } } }
산출:
Hangup (SIGHUP)
Exception in thread 'main' java.lang.ArithmeticException: Cannot divide by zero
at Geeks.main(Geeks.java:9)
설명: 위의 예는 0으로 나누기 때문에 ArithmeticException이 명시적으로 발생하는 throw를 사용하는 예외를 보여줍니다.
자바 던지기
던진다 이 메소드가 나열된 유형 예외 중 하나를 발생시킬 수 있음을 나타내기 위해 메소드의 시그니처에 사용되는 Java의 키워드입니다. 이러한 메서드에 대한 호출자는 try-catch 블록을 사용하여 예외를 처리해야 합니다.
통사론:
execvp
type method_name(매개변수)에서 예외 목록이 발생합니다.
여기서 예외_목록은 메서드가 발생시킬 수 있는 모든 예외를 쉼표로 구분한 목록입니다.
프로그램에서 예외가 발생할 가능성이 있는 경우 컴파일러는 항상 이에 대해 경고하고 확인된 예외를 처리해야 합니다. 그렇지 않으면 보고되지 않은 예외 XXX를 포착하거나 throw하도록 선언해야 한다는 컴파일 시간 오류가 발생합니다. 이 컴파일 시간 오류를 방지하기 위해 다음 두 가지 방법으로 예외를 처리할 수 있습니다.
- Try catch를 사용하여
- 을 사용하여 던진다 예어
throws 키워드를 사용하여 예외 처리 책임을 호출자(메서드 또는 JVM일 수 있음)에게 위임할 수 있으며, 그러면 호출자 메서드가 해당 예외를 처리합니다.
예제 1: 처리되지 않은 예외
Javaclass Geeks { public static void main(String[] args) { Thread.sleep(10000); System.out.println('Hello Geeks'); } }
산출:
error: unreported exception InterruptedException; must be caught or declared to be thrown설명: 위 프로그램에서는 메인 스레드가 절전 모드로 전환되면 예외가 발생할 가능성이 있기 때문에 컴파일 시간 오류가 발생합니다. 다른 스레드는 InterruptedException을 발생시키는 main() 메서드를 실행할 기회를 얻습니다.
예 2: 사용 throws 예외를 처리하려면
class Geeks { public static void main(String[] args) throws InterruptedException { Thread.sleep(10000); System.out.println('Hello Geeks'); } }
산출:
Hello Geeks설명: 위 프로그램에서는 throws 키워드를 사용하여 다음을 처리했습니다. 중단된 예외 그러면 우리는 다음과 같은 결과를 얻게 될 것입니다. 안녕하세요 긱스입니다.
예시 3: 다음을 사용하여 예외 던지기throws
class Geeks { static void fun() throws IllegalAccessException { System.out.println('Inside fun(). '); throw new IllegalAccessException('demo'); } public static void main(String args[]) { try { fun(); } catch (IllegalAccessException e) { System.out.println('Caught in main.'); } } }
산출
Inside fun(). Caught in main.
설명: 위의 예는 메서드에서 IllegalAccessException을 발생시키고 try-catch 블록을 사용하여 기본 메서드에서 이를 처리하는 것입니다.
던지기와 던지기의 차이점
Java에서 throw와 throw의 주요 차이점은 다음과 같습니다.
던지다 | 던진다 |
|---|---|
명시적으로 예외를 발생시키는 데 사용됩니다. | 메소드가 하나 이상의 예외를 발생시킬 수 있음을 선언하는 데 사용됩니다. |
메서드나 코드 블록 내에서 사용됩니다. | 메소드 서명에 사용됩니다. |
확인된 예외와 확인되지 않은 예외를 모두 발생시킬 수 있습니다. | 확인된 예외에만 사용됩니다. 확인되지 않은 예외에는 필요하지 않습니다. 던진다 자바 정렬 목록 |
메서드나 블록이 예외를 발생시킵니다. | 메서드 호출자는 예외 처리를 담당합니다. |
현재 실행 흐름을 즉시 중지합니다. | 호출자가 선언된 예외를 처리하도록 강제합니다. |
throw new ArithmeticException('Error'); | public void myMethod()가 IOException을 발생시킵니다. {} |