2014-12-02 4 views
0

빠른 질문, 예외 잡기 작동 방식에 대해 머리를 감싸는 데 약간의 어려움이 있습니다. 난 당신이Java 사용자 정의 예외 기준

int i = 0; 
if (i == 0) { 
    throw new Exception("i cannot be 0"); 
} 

즉 if 문에서 중첩 예외를 할 수 그러나 여기서 예외에 대한 기준이 충족되는 try/catch 블록에서 이해가 안 이해합니다. 즉, 예외가 발생한다 보여줍니다 위의 코드에는 기준이 없다, 그래서 지금까지 내가 보는 바와 같이

public class NegativeValueException extends Exception{ 

    public NegativeValueException() { 
      super("Numberic values must be nonnegative."); 
     } 

} 

: 내 수업에서 우리는 코드의 모양을 설명,이 경우, 우리 자신의 예외를 만들어야합니다. 값이 음수이므로

int i = 1; 
try { 
    i = -1; 
} catch (NegativeValueException e) { //Thrown exception because the value is negative. 
    //Where is the criteria that catches this exception? 
} 
+0

'catch'_는 기준입니다. 'NegativeValueException'이 _thrown_이면 잡히게됩니다. –

+0

그러나 catch는 어디에 정의되어 있습니까? 코드의 어느 시점에서 실행되고 "예외를 잡아라.이 코드는 NegativeValueException입니다."라고 말합니다. – acupajoe

답변

1

//하면 예외를 슬로우.

당신이 말하지만, 특별히 코드를 작성하지 않는 한 NegativeValueException은 던지지 않습니다.

Java 컴파일러는 예외 테이블을 생성합니다. 이 테이블에는 Exception (Throwable) 유형의 매핑이 저장되며,이 행은 발생할 수있는 행과 이동해야하는 문 catch에 저장됩니다. 예외를 던질 수정하여 예에서

, 지금

NegativeValueException - Between 2 and 3 - Goto 4 

같은 2 (3), NegativeValueException을 실행하는 동안 것은 던져진다면

int i = 1; // 1 
try { 
    i = -1; // 2 
    if (i < 0) throw new NegativeValueException(); // 3 
} catch (NegativeValueException e) { //Thrown exception because the value is negative. // 4 
    //Where is the criteria that catches this exception? // 5 
} 

자바지도 것, JVM이 것 예외 테이블로 이동하여 이동할 명령문을 찾아서 수행하고 throw 된 예외를 catch 매개 변수에 바인딩하십시오.

+0

좋습니다, 이제 맞춤 예외를 throw하는 올바른 방법은 조건 (if 문)을 try 블록에 넣는 것입니까? – acupajoe

+2

@SCHULTZ 만약'NegativeValueException'이'try' 블록에 있지 않거나 던져 질 수 없다면, 대응하는'catch' 블록을 가지고있는 지점이 없습니다. –

+0

Gotcha 좋아, 정말 도움을 주셔서 감사합니다! – acupajoe