>  기사  >  Java  >  Java 프로그래밍에서 예외를 발생시키는 방법을 간략하게 이해합니다.

Java 프로그래밍에서 예외를 발생시키는 방법을 간략하게 이해합니다.

高洛峰
高洛峰원래의
2017-01-18 14:58:431636검색

직접 작성한 코드, Java 개발 환경 패키지의 코드 또는 Java 런타임 시스템과 같은 모든 Java 코드는 예외를 발생시킬 수 있습니다. 누구나 Java의 throw 문을 통해 예외를 던질 수 있습니다. 메서드에서 발생하는 모든 예외는 throws 절을 사용해야 합니다.

1. throws에서 예외 발생

메서드가 예외를 발생시킬 수 있지만 이러한 예외를 처리할 수 없는 경우 메서드 선언에서 throws 절을 사용하여 예외가 발생함을 선언할 수 있습니다. 예를 들어, 자동차가 운행 중 오작동을 일으킬 수 있는 경우, 차량 자체가 오작동을 처리할 수 없으므로 운전자가 처리하도록 하십시오.

throws 문은 메소드를 정의할 때 해당 메소드가 발생시킬 예외 유형을 선언하는 데 사용됩니다. 예외 유형이 발생하면 메소드가 모든 예외를 발생시키도록 선언됩니다. 여러 예외는 쉼표로 구분할 수 있습니다. throws 문의 구문 형식은 다음과 같습니다.

methodname throws Exception1,Exception2,..,ExceptionN 예외 목록. 메소드가 예외 목록에서 예외를 발생시키는 경우 해당 메소드는 이러한 유형 및 해당 서브클래스의 예외를 처리하지 않지만 처리를 위해 메소드를 호출하는 메소드에 예외를 발생시킵니다. 예:

import java.lang.Exception; 
public class TestException { 
  static void pop() throws NegativeArraySizeException { 
    // 定义方法并抛出NegativeArraySizeException异常 
    int[] arr = new int[-3]; // 创建数组 
  } 
   
  public static void main(String[] args) { // 主方法 
    try { // try语句处理异常信息 
      pop(); // 调用pop()方法 
    } catch (NegativeArraySizeException e) { 
      System.out.println("pop()方法抛出的异常");// 输出异常信息 
    } 
  } 
   
}

throws 키워드를 사용하여 호출자에게 예외를 던진 후 호출자가 예외를 처리하기를 원하지 않으면 계속 위로 던질 수 있지만 결국에는 다음이 있어야 합니다. 예외를 처리할 수 있는 호출자입니다.

pop 메소드는 NegativeArraySizeException 예외를 처리하지 않고 main 함수에 의해 처리됩니다.

예외 발생 규칙을 throw합니다:

1) 확인되지 않은 예외(unchecked 예외), 즉 Error, RuntimeException 또는 해당 하위 클래스인 경우 throws 키워드를 사용하지 않고 선언할 수 있습니다. 발생하는 예외는 컴파일 중에 원활하게 전달되지만 런타임 시 시스템에 의해 발생됩니다.

2) 메소드에서 발생할 수 있는 모든 확인된 예외를 선언해야 합니다. 즉, 메서드에 검사 가능한 예외가 있는 경우 try-catch 문을 사용하여 이를 포착하거나 throws 절 문을 사용하여 예외를 발생시킵니다. 그렇지 않으면 컴파일 오류가 발생합니다.

3) 다음과 같은 경우에만 예외가 발생하면 이 메서드의 호출자만 예외를 처리하거나 다시 발생시켜야 합니다. 메서드 호출자가 예외를 처리할 수 없는 경우 예외를 삼키는 대신 계속해서 예외를 발생시켜야 합니다.

4) 호출 메서드는 확인 가능한 모든 예외의 처리 및 선언 규칙을 따라야 합니다. 메서드를 재정의하는 경우 재정의된 메서드와 다른 예외를 선언할 수 없습니다. 선언된 모든 예외는 재정의된 메서드에서 선언된 예외와 동일한 클래스 또는 하위 클래스에 속해야 합니다.

예:

메서드에서 예외가 발생할 수 있는지 판단하는 기준은 다음과 같습니다.

1) 메소드에 throw 문이 있습니다. 예를 들어, 위 method7() 메서드의 catch 코드 블록에는 throw 문이 있습니다.

2) 다른 메소드가 호출되고, 다른 메소드는 throws 절을 사용하여 일종의 예외를 발생시키도록 선언됩니다. 예를 들어, method3() 메서드는 method1() 메서드를 호출하고, method1() 메서드는 IOException을 발생시키도록 선언하므로, method3() 메서드에서 IOException이 발생할 수 있습니다.

2. throw를 사용하여 예외 발생

throw는 항상 함수 본문에 나타나며 Throwable 유형의 예외를 발생시키는 데 사용됩니다. 프로그램은 throw 문 직후에 종료되며 그 뒤의 문은 실행될 수 없습니다. 그런 다음 프로그램은 이를 포함하는 모든 try 블록(아마도 상위 수준에서)에서 일치하는 catch 절이 포함된 try 블록을 내부에서 검색합니다. 호출 기능).

예외는 예외 클래스의 인스턴스 객체라는 것을 알고 있습니다. 예외 클래스의 인스턴스 객체를 생성하고 throw 문을 통해 이를 던질 수 있습니다. 이 문의 구문 형식은

throw new exceptionname;

입니다. 예를 들어 IOException 클래스의 예외 개체를 발생시키는 경우:

throw new IOException;

던지기(throw)는 던질 수 있는 클래스 Throwable 또는 그 하위 클래스의 인스턴스 객체만 될 수 있습니다. 다음 작업이 잘못되었습니다.

throw new String(“exception”)

이는 String이 Throwable 클래스의 하위 클래스가 아니기 때문입니다.

확인된 예외가 발생하는 경우 해당 메소드가 발생시킬 수 있는 예외 유형도 메소드 헤더에 선언되어야 합니다. 이 메서드의 호출자는 발생한 예외를 처리하는지 확인해야 합니다.

모든 메소드가 획득한 예외를 계층별로 발생시키면 결국 JVM이 이를 처리하게 됩니다. 예외 메시지와 스택 정보를 인쇄하는 처리도 매우 간단합니다. Error 또는 RuntimeException이 발생하는 경우 메서드 호출자는 예외를 처리하도록 선택할 수 있습니다.

package Test;
import java.lang.Exception;
public class TestException {
  static int quotient(int x, int y) throws MyException { // 定义方法抛出异常
    if (y < 0) { // 判断参数是否小于0
      throw new MyException("除数不能是负数"); // 异常信息
    }
    return x/y; // 返回值
  }
  public static void main(String args[]) { // 主方法
    int a =3;
    int b =0; 
    try { // try语句包含可能发生异常的语句
      int result = quotient(a, b); // 调用方法quotient()
    } catch (MyException e) { // 处理自定义异常
      System.out.println(e.getMessage()); // 输出异常信息
    } catch (ArithmeticException e) { // 处理ArithmeticException异常
      System.out.println("除数不能为0"); // 输出提示信息
    } catch (Exception e) { // 处理其他异常
      System.out.println("程序发生了其他的异常"); // 输出提示信息
    }
  }
   
}
class MyException extends Exception { // 创建自定义异常类
  String message; // 定义String类型变量
  public MyException(String ErrorMessagr) { // 父类方法
    message = ErrorMessagr;
  }
   
  public String getMessage() { // 覆盖getMessage()方法
    return message;
  }
}

Java 프로그래밍에서 예외를 던지는 방법을 간단히 이해하는 것과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트에 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.