2010-11-30 4 views
4

이 오류에 대해 알고 있습니다. 하지만 어떻게 호출 스택 아래 로이 작품을 이해하지 않는 것 같아요.Java 예외 : exception 해당 try 문의 본문에서 예외가 발생하지 않습니다.

파일 Main.java :

public static void main(String[] args) { 
    try { 
     Function1(); 
     } catch (myException e) { 
     System.out.println(e.getMessage()); 
    } 
} 
public static void Function1() { 
    Function2(); 
} 

기능 2는 다른 파일에 존재 : 나는 기능 2가 (호출 스택 아래)

File2.java 여러 호출을 통해 그래서

public void Function2() throws myException { 
    .... 
} 

하는 요구 사항 "throws myException"을 지정합니다. 어떻게 main 함수 (에러가 보내지는 곳)가 myException을 던져 버리는 것을 인식하지 못하는가?

내 "예외 지식"의 '구멍'이 어디에 있는지에 대한 안내는 크게 감사하겠습니다.

aitee,

+0

만약 myException이 런타임 예외입니까? 만약 당신이 Function2 던져 myException 던지, Function1도 던져해야합니다. – hvgotcodes

+0

Main과 File2 클래스 사이의 관계는 무엇입니까? (어느 쪽이 하나를 상속합니까?) –

+0

이것은 여러분의 질문과는 직접적으로 관련이 없지만 명명 규칙을 따르는 것이 좋습니다 :'Function1'과'Function2'와 같은 메소드는 소문자로 시작해야하며 클래스는 'myException'은 대문자로 시작해야합니다. 협약을 통해 귀하와 다른 프로그래머는 서로의 코드를 더 잘 이해할 수 있습니다. –

답변

1

구멍이 Function2가 예외를 throw 선언이다, 그러나 Function1하지 않습니다. Java는 가능한 호출 계층을 통해 길을 파지 않지만 throws 문에서 선언 한 내용으로 직접 이동합니다.

Function1은 아마도 myExceptionRuntimeException이기 때문에 던지기를 선언하지 않을 수 있습니다.

+0

그렇다면 내가 말하는 사슬을 선언 할 필요가 있다는 말입니까? – aitee

+0

글쎄, 고쳐 주었어 ... 고마워. 그래서 핸들러에서 던지기까지의 경로 (호출 스택 아래)는 도중에있는 각 함수가 처리기까지 "던져"(또는 던지기) 할 수있는 요구 사항을 가져야합니다. – aitee

1

Function1()throws myException을 선언하지 않습니다. 즉, 컴파일 또는 선언되지 않은 예외에 대한 예외와 선언되지 않은 예외에 대한 예외 중 하나가 2 개의 컴파일 오류가 있어야 함을 의미합니다.

+0

'myException'이'RuntimeException'이기 때문에 누락 된'throws '에 대한 오류가 없다고 생각합니다. –

+1

RuntimeException이라면 첫 번째 오류가 발생하지 않아야합니다. – Darron

관련 문제