자바 이상 처리 중throw와throws 키워드의 사용법 차이 상세히 설명

4829 단어 Java이상
이상 투척
이상을 던지는 데는 세 가지 형식이 있는데, 하나는 throw이고, 하나는throws이며, 또 하나는 시스템이 자동으로 이상을 던지는 것이다.다음은 그들 사이의 공통점과 차이점이다.
시스템 자동 던지기 이상
프로그램 문장에 논리적 오류, 주의 오류, 유형 변환 오류가 발생하면 시스템은 자동으로 이상을 던진다.예:

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;
일반적으로 프로그램에 어떤 논리가 나타날 때 프로그래머가 특정한 유형의 이상을 주동적으로 던지는 데 사용된다.예:

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는 방법이 이상한 성명을 던질 수 있습니다.(성명 방법에 사용할 때 이 방법이 이상을 던질 수 있음을 나타낸다)
문법: [(수식자)] (반환값 형식) (방법명) ([매개 변수 목록]) [throws (이상 클래스)] {...}
예:

 public void function() throws Exception{......}
어떤 방법이 어떤 이상을 던질 수 있을 때throws에서 던질 수 있는 이상을 설명하고 상부에서 그것을 호출하는 방법 프로그램에 맡깁니다.예:

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와throws의 비교
1,throws는 방법 함수 헤더에 나타난다.throw는 함수체에 나타난다.
2,throws는 이상이 발생할 가능성을 나타내는데 반드시 이런 이상이 발생하는 것은 아니다.throw는 이상을 던졌고, 실행throw는 틀림없이 어떤 이상 대상을 던졌을 것이다.
3. 둘 다 소극적으로 이상을 처리하는 방식(여기의 소극은 이런 방식이 좋지 않다는 것이 아니다)이다. 다만 이상을 던지거나 던질 수 있지만 함수로 이상을 처리하지 않는다. 진정한 처리 이상은 함수의 상부에서 호출되어 처리한다.
좋은 프로그래밍 습관:
1. 프로그램을 쓸 때 이상이 발생할 수 있는 부분에 대해try {...}catch{...}그것을 잡고 처리하기;
2.try로 {...}catch{...}이상을 포착한 후 반드시 캐치에서 {...}에서 가장 간단한 출력 문장이나 e.printStackTrace () 를 스택으로 입력할 수도 있습니다.
3. 입출력 입력 출력 흐름의 이상을 포착하려면try {...}catch{...}뒤에 finally 를 추가합니다.입력 출력 흐름 닫기;
4. 함수 체내에서throw로 어떤 이상을 던졌다면, 함수 이름에throws로 이상 성명을 넣은 다음 호출된 상부 함수에 넘겨 처리하는 것이 좋다.
예:
throws 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(" ");
}

코드 블록에 3개의 이상이 발생할 수 있습니다(Exception1, Exception2, Exception3).
Exception1 이상이 발생하면 포획한 후에 던지고 이 방법의 호출자가 처리합니다.
Exception2 이상이 발생하면 이 방법은 자체적으로 처리됩니다 (즉, System.out.println ("잘못되었습니다!").그래서 이 방법은 더 이상 밖으로 Exception2 이상을 던지지 않습니다.void doA ()throws Exception1, Exception3 안의 Exception2도 쓰지 않아도 됩니다.
한편, Exception3 이상은 이 방법의 어떤 논리 오류입니다. 프로그래머가 직접 처리했습니다. 이 논리 오류가 발생한 상황에서 이상 Exception3를 던지면 이 방법의 호출자도 이 이상을 처리해야 합니다.
throw 문장은 방법체에 사용되며 이상을 던지고 방법체 내의 문장으로 처리된다.
throws 문장은 방법 성명 뒤에 사용되며, 다시 이상을 던지면 이 방법의 호출자가 처리합니다.
throws는 주로 이 방법이 이런 종류의 이상을 던져 호출자가 이 이상을 포획해야 한다는 것을 알게 할 것이라고 성명합니다.
throw는 구체적으로 밖으로 이상한 동작을 던지기 때문에 이상한 실례를 던진다.
throws는 네가 그럴 가능성, 경향이 있다는 것을 설명한다.
throw라면, 그것은 바로 네가 그 경향을 진실로 바꾼 것이다.
시스템 이상이면 아무것도 하지 않아도 되고 방법에 따라 이상을 던질 수도 있다. 시스템 이상은 시스템에 의해 자동으로 포착될 수 있기 때문에 이 이상은 방법 내부에서 해결해야 하는지 상부 함수에 맡겨야 하는지 그 효과는 같다.그러나 나는 많은 자료를 조사했다. 이상을 던져서 시스템에 잡히더라도 방법에 대해throws를 쓰는 것을 권장했다. 왜냐하면 이렇게 하면 대형 임무를 완성할 때 다른 프로그래머에게 이곳에 무슨 이상이 생길지 알 수 있기 때문이다.
자신이 정의한 이상이면throws로 이 방법이 던질 수 있는 이상을 던져야 합니다. 그렇지 않으면 컴파일이 잘못될 수 있습니다.

좋은 웹페이지 즐겨찾기