2013-12-18 3 views
2

Я знаю, что RunTimeExceptions могут быть захвачены блоком блокировки Exception, как показано ниже.Ловля исключения времени выполнения?

public class Test { 
    public static void main(String[] args) { 
     try { 
      throw new RuntimeException("Bang"); 
     } catch (Exception e) { 
      System.out.println("I caught: " + e); 
     } 
    } 
} 

У меня есть свой собственный класс исключений, как показано ниже.

public class CustomException extends Exception { 


    public CustomException(String message, Throwable cause) { 
     super(message, cause); 
    } 


    public CustomException(String message) { 
     super(message); 
    } 
} 

Но теперь вместо того, чтобы исключения в блоке поймать, я продолжал CustomException.But время выполнения исключение не перехвачено улова блока в настоящее время. Зачем?

public class Test { 
     public static void main(String[] args) { 
      try { 
       //consider here i have some logic and there is possibility that the logic might throw either runtime exception or Custom Exception 
       throw new RuntimeException("Bang"); 
      } catch (CustomException e) { 
       System.out.println("I caught: " + e); 
      } 
     } 
    } 

Спасибо!

+0

не нужно писать java снова в заголовке, ярлык java достаточно – SpringLearner

ответ

10

enter image description here

Расширение класса Exception не делает это время выполнения Exception. См. Диаграмму выше. Также вы можете использовать полиморфную ссылку (суперкласс), чтобы поймать подкласс Exception. Это не работает наоборот.

+0

Как говорится «Фотография рисует тысячу слов» –

+0

RuntimeException не является исключением, исключение или, возможно, Throwable, но все три являются конкретными классами и не предоставляют интерфейс «catch-all». – Pedantic

5

Это потому, что CustomException не является классом высшего качества RuntimeException. Поскольку вы выбрасываете RuntimeException, который не является подклассом CustomException, блок catch не поймает его.

+0

Deepak, CustomException расширяет Исключение справа? – user755806

+0

Aye, 755806, но CustomException не распространяется на RuntimeException, у них разные контракты. – Pedantic

Смежные вопросы