2013-06-11 2 views
7

저는 Java를 처음 사용하고 있으며 예외 처리를 고려하고있었습니다. 우리가 자바 예외를 잡을 때, 우리는, 선언하고 초기화하지 않고 Exception 클래스의 Object를 사용 즉Java 예외 클래스

catch(NullPointerException e) 
    e.printStackTrace(); 

그래서 제 질문은, 어떻게 우리가 그것을 인스턴스화하지 않고 객체 참조 전자를 사용할 수 있습니다입니까?

+0

힌트 : 당신이 잡는 예외 객체는 * 예외가 던진 블록 내에서 인스턴스화되었다. – Santa

+0

동일하게 메서드 매개 변수에 적용됩니다. 그들은 다른 곳에 건설되어 그 방법으로 보내집니다. 예외는 아니지만 다른 메커니즘입니다. – EJP

답변

8

은 그들은 잘 인스턴스화 :

void example() { 
    throw new UnsupportedOperationException("message"); 
}  // ^^^ 

void demonstration() { 
    try { 
     example(); 
    } catch (UnsupportedOperationException e) { 
     e.printStackTrace(); 
    } 
} 

이 매우 간단한 예는 꽤 자기 설명해야 ...

1

throw 문을 사용하여 오류가 발생하면 예외가 (종종) 인스턴스화됩니다. 예를 들어,

throw new NullPointerException(); 

(이것은 단지 예입니다 있습니다. NPEs는 일반적으로 명시 적으로 자신의 코드에 던져되지 않습니다.)

catch 절은 매개 변수를 선언하는 기능과 유사하다. s를 인스턴스화하지 않는 기능

void func(String s) { 
    // ... 
} 

func을 고려하십시오. String은 다른 곳에서 만들어져 함수로 전달됩니다. 같은 방법으로 우리는 throw으로 예외를 만들고 매개 변수와 같은 종류의 catch 절에 "전달"됩니다.

0

예, catch(NullPointerException e)e를 참조 throw new NullPointerException("some error message");

를 사용하여 코드에서 발생 가능한 예외입니다
0

예외가 인스턴스화됩니다. 잠재적으로 예외를 던질 수있는 클래스 내부에서 발생합니다. 당신의 정보를 위해서, 키워드 throw는 예외를 생성하고 던질 책임이있다. catch 메소드는 예외를 catch합니다. 이 키워드를 사용하여 예외를 구현할 수도 있습니다.