2015-01-07 1 views
4

사용자 정의 예외 (예 : SkillRequiredException)가있는 경우 직원의 기술 검사와 같은 상태인지 확인하고 조건이 실패하면 SkillRequiredException을 던집니다. 이 때까지 나는 훌륭하고 명확하다.Exceptional 오브젝트가 Java checked Exception 중 하나로 변환되어 있습니까?

그러나 FileInputStream 클래스를 가져 가십시오. FileNotFound 예외가 확인되었습니다. FileInputStream 소스 코드를 볼 때 어디서나 볼 수 없었습니다 - 어떤 조건 (및) throw FileNotFoundException을 확인했습니다.

내 질문은 JVM이 파일이없는 방법 JVM에 의해 생성 된 뛰어난 개체 FileInputStream 클래스 throw FileNotFoundException을 사용하여와 FileNotFoundException로 식별되는 것을 알고 어떻게, 무엇입니까? 당신이 FileInputStream의 생성자를 호출하는 방법을 확인하는 경우

답변

7

음, 당신은 결국 호출하는 것을 볼 수 있습니다 :

private native void open(String name) throws FileNotFoundException; 

을이 그것을 자바와 당신에 기록되지 아니 의미합니다 기본 방법입니다 코드를 볼 수는 없지만 여전히 FileNotFoundException 예외가 발생할 수 있습니다. 이 코드를 찾을 수 FileInputStream에에서

+0

합니다. 감사합니다 – Sanjeevan

0

:

public FileInputStream(File file) throws FileNotFoundException { 
     ... 
     open(name); 
} 

오픈 정의됩니다

/* 
* Opens the specified file for reading. 
* @param name the name of the file 
*/ 
private native void open(String name) throws FileNotFoundException; 

당신은 쉽게 JDK는 OS에 따라이 작업을 수행하는 JNI를 사용하는 방법을 확인할 수 있습니다에 대한 OpenJdk를 사용하는 Windows의 경우 io_util_md.c (complete source) 안에이 코드 조각을 찾을 수 있습니다.

그리고 당신은 io_util.c에서 throwFileNotFoundException의 구현 (complete code) 확인할 수 있습니다 : 나는, 둘다 지금은 이해할 수

void 
throwFileNotFoundException(JNIEnv *env, jstring path) 
{ 
    char buf[256]; 
    jint n; 
    jobject x; 
    jstring why = NULL; 

    n = JVM_GetLastErrorString(buf, sizeof(buf)); 
    if (n > 0) { 
     why = JNU_NewStringPlatform(env, buf); 
    } 
    x = JNU_NewObjectByName(env, 
          "java/io/FileNotFoundException", 
          "(Ljava/lang/String;Ljava/lang/String;)V", 
          path, why); 
    if (x != NULL) { 
     (*env)->Throw(env, x); 
    } 
} 
+0

설명을 주신 Patrick에게 감사드립니다. – Sanjeevan