2017-09-21 4 views
1

throws 키워드를 사용하여 사용자 정의 예외를 throw 할 때 명시 적으로 처리해야합니다. 이자형. try-catch 블록 내에서 메서드를 호출해야하지만 try-catch 블록을 사용하여 main 메서드 내부에서 처리하지 않으면 throws 키워드를 사용하여 기본 제공 예외를 throw하는 동안 컴파일 타임 오류가 발생하지 않습니다. 런타임 예외가 발생하는 것은 허용됩니다. 내 질문은 사용자 정의 예외를 처리하지 않는 경우 컴파일 타임 오류가 발생합니다 : 처리되지 않은 예외입니다. 이의 경우는 아니지만 내장 예외사용자 정의 예외 처리

class B 
{ 
    public void show() throws ArithmeticException 
    { 
     throw new ArithmeticException(); 
    } 
} 

public class Myclass { 

    public static void main(String[] args) { 
    B b = new B(); 
    b.show(); 
} 
} 

나는 산술 예외를 처리하지 않고 위의 코드를 컴파일 할 때 그때

class A extends Exception 
{ 
    public A() 
    { 
     System.out.println("Exception thrown"); 
    } 
} 

class B extends A 
{ 
    public void show() throws A 
    { 
     throw new A(); 
    } 
} 

public class Myclass { 

    public static void main(String[] args) { 
     B b = new B(); 
     b.show(); 
    } 
} 

는하지만 컴파일 어떤 컴파일 타임 오류가 발생하지 않습니다 위의 코드에서는 컴파일 타임 오류가 발생하여 A 유형의 예외를 처리하지 못했다는 것을 알 수 있습니다. 따라서 사용자 정의 예외를 처리해야 할 때 기본 제공 예외를 처리 할 수없는 이유는 무엇입니까?

+0

달성하려는 내용을 더 잘 이해할 수 있도록 예제 코드를 추가하십시오. – sebadagostino

+0

클래스 Exception을 확장하여 생성 한 예외는 확인 된 예외이며 메서드 선언에 throw되도록 선언하거나 try-catch를 사용하여 처리해야한다고 생각합니다. 산술 예외는 핸들 또는 선언 규칙이 강제적이지 않은 런타임 예외 유형입니다. –

+0

클래스 runtimexception을 확장하여 예외를 만들면 코드가 컴파일됩니다. –

답변

1

그래서 내 예외는 사용자 지정 예외를 처리하는 것이 의무 인 반면 기본 제공 예외를 처리하지 않아도되는 이유입니다.

아니요. 정말 "사용자 정의 예외"에 따라 다릅니다. 이 옵션을 선택하지 않으면 컴파일 타임에 확인할 방법이 없습니다. ArithmeticException. 왜? 왜냐하면 사업부가 제로이고 예외를 던지면 실제로 작업을 수행해야만하며 이는 런타임에만 발생합니다. 따라서 검사되지 않은 예외는 항상 RuntimeException까지 확장됩니다.

따라서 확인 된 예외는 일 수 있으며 컴파일시에는입니다. 따라서 컴파일 타임에 (명시 적으로) 처리됩니다.