2013-04-16 2 views
3

상위 처리 언어 (예 : Java)에서 예외 처리가 구현되는 방식은 무엇입니까? 이것으로, 나는 언어 내에서 예외를 사용하는 방법을 의미하지는 않는다. 내 말은 컴파일러가 예외 처리로 인식하는 코드 (어셈블리 또는 Java 바이트 코드와 같은 일부 중간체)를 생성하는 방법입니다. 결국 컴퓨터가 명령 만 실행할 수 있기 때문입니다. 높은 수준의 모든 것은 그러한 지시로 구성되어야합니다.Java에서 예외 처리는 어떻게 구현됩니까?

예외가 존재하기 전에 C에서 오류 코드를 반환하지만 함수가 이미 결과를 반환하면 무엇을해야합니까? 아마도 오류 코드와 실제 결과의 구조를 반환 할 것입니까?

+0

두 개의 대체 반환 값이 있다고 생각할 수 있습니다. 문자열이나 숫자 또는 아무것도 아닌 값을 반환하거나 오류 조건을 반환합니다. 두 가지 모두 약간의 데이터 묶음 일뿐입니다. 생성 된 호출 코드는 발생한 것을 감지하고 처리해야합니다. 어쩌면 거기에 잡힐 것입니다. 아마도 호출 메서드/함수는 오류 조건을 반환합니다. –

+0

C에서 하나 이상의 특수 함수 ('setjmp()'와'longjmp()')를 사용하여 하나 이상의 정상 함수 리턴을 우회하는 이전 포인트로 되돌릴 수 있습니다. 이러한 기능은 그러한 "점프"를 용이하게하기 위해 구조에 /에서 최소 CPU 상태 (일반적으로 레지스터 몇 개)를 기록하고 복원합니다. –

+1

4 '건설적인 투표가 아닌가?' 부디. 이 질문은 JVM 명세에서 찾을 수있는 사실적인 답변이 하나 있습니다. – EJP

답변

2

는 컴파일러 드로 사이트에서 athrow 명령 (JVM Specification) 그들이 커버 명령들의 어떤 범위의 모든 다양한 캐치 절 어디에 표시에있어서의 부호의 Exceptions 속성 (#4.7.5), 어떤 출력 catch하는 예외 유형.

+0

그래서 JVM이'athrow' 명령을 실행 한 후에 던져진 객체 참조의 유형을 검사하고 예외 속성에 나열된 예외와 비교 한 다음 적절한 것으로 건너 뜁니다. 이게 옳은 거니? 예외가 목록에 없으면 어떻게됩니까? – Tespa42

+1

예외가 목록의 아무 것도 포착되지 않으면 메서드에서 호출자로 외부로 전파됩니다. – EJP