2012-08-01 2 views
10

일반적으로 Java 컴파일러는 throw 된 확인 된 예외가 모두 throw 사양에 있음을 확인합니다. 네이티브 함수가 기능 검사 예외 목록에없는 java checked 예외를 throw하거나 런타임에 무시되는 throw 사양 목록 일 경우 특별한 일이 발생합니까?Java 검사 예외가 함수의 throw 사양에 없습니다.

C++

void function(JNIEnv * env, jclass jc) { 
    jclass newExcCls = env->FindClass("java/lang/NullPointerException"); 
    env->ThrowNew(newExcCls, "ERROR"); 
} 

는 C++ 함수 이름이 아마 엉망이 될 것이다 (

public class Tester { 
    static { 
     System.loadLibrary("MyLibrary"); 
    }   
    private static native void function(); 
    public static void main(String [ ] args) { 
     try { 
      function(); 
     } catch(Exception e) { //is it caught? Or what happens? 
      e.printStackTrace(); 
     }   
    } 
} 

자바

. 또한의 loadLibrary이 시도 캐치에 있어야합니다. 상관 없어, 나는 믿지 않는다 문제가 될 수 있습니다. 코드에 다른 오류가있을 수 있지만 아마도 관련이 없습니다.)

+0

나는 이것이 중복되지 않는 것에 다소 놀랐습니다. –

답변

5

확인 된 예외 메커니즘을 속일 때 네이티브 코드를 사용해야 할 필요조차 없습니다 엠. Javadoc on Thread.stop(Throwable)을 참조하십시오. 내 코드가 선언하지 않은 코드의 중간에 InterruptedException을 어떻게 내 던지 궁금해졌습니다. 나는 그 때 그 답을 찾지 못했지만, 지금 나는 알고있다. :)

즉각적인 질문에 답하라. 예, 확인 된 예외 논리는 컴파일러 전용 기능이며 런타임에는 무시된다.

+0

링크 된 함수는 좋은 예제가 아닙니다. 볼 수있는 범위 내에서 검사되지 않은 예외를 throw하기 때문에 예외 목록을 던질 필요가 없습니다. –

+0

다음 문장을 읽으면 "이 스레드가 나타내는 스레드는 비정상적으로 수행중인 작업을 모두 완료하고 Throwable 개체 obj를 예외로 throw합니다." –

+0

아, 그 문장을 놓쳤다. 나는 예외 수업 명을 찾고 있었다. 재미있는 찾기. –

관련 문제