> Java > java지도 시간 > 본문

Java 예외 처리에서 throw 및 throws 키워드 사용법의 차이점에 대한 자세한 설명

高洛峰
풀어 주다: 2017-01-18 14:50:01
원래의
2103명이 탐색했습니다.

예외 발생
예외 발생에는 세 가지 형태가 있습니다. 하나는 발생, 다른 하나는 발생이며 시스템이 자동으로 예외를 발생시킵니다. 다음은 이들 사이의 유사점과 차이점입니다.
시스템이 자동으로 예외를 발생시킵니다
프로그램 명령문에 논리적 오류, 교리 오류 또는 유형 변환 오류가 있는 경우 시스템이 자동으로 예외를 발생시킵니다. 예:

public static void main(String[] args) {
    int a = 5, b =0;
    System.out.println(5/b);
    //function();
}
로그인 후 복사

시스템에서 자동으로 ArithmeticException이 발생합니다.

Exception in thread "main" java.lang.ArithmeticException: / by zero
at test.ExceptionTest.main(ExceptionTest.java:62)
로그인 후 복사

또 다른 예는

public static void main(String[] args) {
    String s = "abc";
    System.out.println(Double.parseDouble(s));
    //function();
}
로그인 후 복사

<입니다. 🎜 >시스템은 자동으로 NumberFormatException 예외를 발생시킵니다.

Exception in thread "main" java.lang.NumberFormatException: For input string: "abc"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)
at java.lang.Double.parseDouble(Double.java:510)
at test.ExceptionTest.main(ExceptionTest.java:62)
로그인 후 복사

throw

throw는 예외를 발생시키는 명령문입니다.
구문: throw(예외 개체);
예:

throw e;
로그인 후 복사

는 일반적으로 특정 논리가 발생할 때 프로그래머가 특정 유형의 예외를 적극적으로 throw할 때 사용됩니다. 프로그램. 예를 들어

public static void main(String[] args) {
    String s = "abc";
    if(s.equals("abc")) {
      throw new NumberFormatException();
    } else {
      System.out.println(s);
    }
    //function();
}
로그인 후 복사

는 예외를 발생시킵니다.

Exception in thread "main" java.lang.NumberFormatException
at test.ExceptionTest.main(ExceptionTest.java:67)
로그인 후 복사

throws

throws는 메소드가 예외를 발생시킬 수 있다는 명령문입니다. (메서드를 선언할 때 사용되며, 해당 메서드가 예외를 throw할 수 있음을 나타냅니다.)
구문: [(수정자)](반환 값 유형)(메서드 이름)([매개 변수 목록])[throws(예외 클래스)]{ ......}
예:

public void function() throws Exception{......}
로그인 후 복사

메서드가 일종의 예외를 발생시킬 수 있는 경우, 발생될 수 있는 예외를 선언하기 위해 발생에서 사용됩니다. 상위 계층은 처리를 위해 메소드 프로그램을 호출합니다. 예:

public static void function() throws NumberFormatException{
    String s = "abc";
    System.out.println(Double.parseDouble(s));
  }
    
  public static void main(String[] args) {
    try {
      function();
    } catch (NumberFormatException e) {
      System.err.println("非数据类型不能转换。");
      //e.printStackTrace();
    }
}
로그인 후 복사

처리 결과는 다음과 같습니다.

데이터가 아닌 유형은 변환할 수 없습니다.
throw와 throw의 비교
1. Throw는 메소드 함수 헤더에 나타나고, throw는 함수 본문에 나타납니다.
2. throw는 예외의 가능성을 나타내지만 이러한 예외가 반드시 발생하는 것은 아닙니다. throw는 예외가 발생한다는 의미이며, throw를 실행하면 일종의 예외 개체가 발생해야 합니다.
3. 둘 다 예외를 처리하는 수동적인 방법입니다(여기서 부정은 예외를 발생시키거나 발생시킬 수 있다는 의미는 아닙니다). 그러나 예외는 함수에 의해 처리되지 않으며 실제로는 예외가 발생합니다. 이는 함수의 상위 계층 호출에 의해 처리됩니다.

좋은 프로그래밍 습관:

1. 프로그램을 작성할 때 일반적으로 try{...}catch{...}를 사용하여 예외가 발생할 수 있는 부분을 잡아서 실행합니다.
2. try{...}catch{...}로 예외를 catch한 후에는 가장 간단한 출력 문이라도 catch{...}에서 처리해야 합니다. 또는 스택 입력 e.printStackTrace ();
3. IO 입력 및 출력 스트림에서 예외를 포착하는 경우 try{...}catch{...} 뒤에 finally{...}를 추가하여 입력을 입력하세요. 스트림이 닫힙니다.
4. 함수 본문에서 throw를 사용하여 특정 예외가 발생하는 경우 함수 이름에 throws 예외 문을 추가한 다음 이를 호출하는 상위 수준 함수에 전달하는 것이 가장 좋습니다. 처리를 위해.

예:

throw E1, E2, E3은 이 메소드가 이러한 예외를 발생시킬 수 있으며 메소드 호출자가 이러한 예외를 처리해야 할 수도 있음을 프로그램에 알립니다. 예외 E1, E2 및 E3은 함수 본문에 의해 생성될 수 있습니다.

throw는 이 예외가 이 위치에 던져질 것임을 분명히 합니다.

예:

void doA(int a) throws IOException,{
      try{
         ......
 
      }catch(Exception1 e){
       throw e;
      }catch(Exception2 e){
       System.out.println("出错了!");
      }
      if(a!=b)
       throw new Exception3("自定义异常");
}
로그인 후 복사

코드 블록에는 세 가지 예외(예외1,예외2,예외3)가 발생할 수 있습니다.

Exception1 예외가 발생하면 이를 포착한 후 발생시키고 메소드 호출자가 처리합니다.
Exception2 예외가 발생하면 메서드가 이를 자체적으로 처리합니다(예: System.out.println("An error 발생!");). 따라서 이 메서드는 더 이상 Exception2 예외를 발생시키지 않으며, void doA()는 Exception1을 발생시키며, Exception3의 Exception2는 작성할 필요가 없습니다.
Exception3 예외는 프로그래머가 직접 처리한 특정 논리 오류입니다. 논리 오류로 인해 예외 3이 발생하면 메서드 호출자도 이 예외를 처리해야 합니다.

throw 문은 메서드 본문에서 예외가 발생했음을 나타내기 위해 사용되며, 이 예외는 메서드 본문의 문에 의해 처리됩니다.

throws 문은 메서드 선언 뒤에 사용되어 예외가 발생하고 메서드 호출자가 처리할 것임을 나타냅니다.

throw는 주로 이 메소드가 이러한 유형의 예외를 발생시킬 것이라고 선언하므로 호출자가 이 예외를 포착할 수 있음을 알 수 있습니다.

throw는 예외를 발생시키는 특정 작업이므로 예외 인스턴스를 발생시킵니다.

던지기는 그런 가능성과 성향을 갖고 있다는 걸 보여준다.

무언가를 던지면 그 경향이 현실로 바뀌는 것입니다.

시스템 예외인 경우 아무 작업도 수행할 필요가 없거나 메서드에 대한 예외를 발생시킬 수 있습니다. 시스템 예외는 시스템에서 자동으로 포착될 수 있으므로 이 예외가 메서드 내에서 해결되어야 합니다. 메소드에 넘겨지는가? 상위 계층 기능은 실제로 동일한 효과를 갖습니다. 하지만 많은 정보를 확인했고 예외가 발생하여 시스템에서 catch할 수 있는 경우에도 해당 메서드에 대한 throw를 작성하는 것이 좋습니다. 이렇게 하면 다른 프로그래머가 대규모 작업을 완료할 때 어떤 예외가 발생할지 알 수 있기 때문입니다. 일.

자체 정의된 예외인 경우 throw를 사용하여 메서드에서 발생할 수 있는 예외를 발생시켜야 합니다. 그렇지 않으면 컴파일에서 오류가 보고됩니다.

Java 예외 처리에서 throw와 throws 키워드의 사용법 차이에 대한 자세한 설명은 PHP 중국어 웹사이트의 관련 기사를 참고하세요!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿