2015-10-11 5 views
0

Обработка исключений: прямая цитата профессора: «Хотя класс Exception можно использовать непосредственно в программе, лучше использовать определенный класс исключений». Он не очень много рассказывал об этом, но мне интересно узнать, что думают другие, и если он прав, почему?Классы исключений в Java

+0

Профессора всегда правы, верьте им. Если какое-либо сомнение поймает их после класса, и они будут рады вас обязать. – hagrawal

+0

[Как определить пользовательский класс исключений в Java] (http://stackoverflow.com/questions/3776327/how-to-define-custom-exception-class-in-java-the-easiest-way) – GabrielOshiro

ответ

4

То, что он означает, что ничто не мешает вам делать throw new Exception("this happened"); и throw new Exception("that happened");

Но это лучшая практика, чтобы сделать throw new ThisException() и throw new ThatException();

Это потому, что в другом месте вы можете catch(ThisException e) и справиться с ней, точно зная, что случилось, без необходимости catch(Exception e) и удивляться, было ли это брошено, потому что «это» произошло, или потому что «это» произошло.

Я был в ситуациях, когда мне приходилось делать String s = e.getMessage();, а затем попытаться разобрать строку, чтобы попытаться понять ее, и поверьте мне, это не забавно вообще делать что-то подобное.

+0

Он также мог означает, что вместо использования блокировки 'Исключение'' используйте специальный блок catch catch, поэтому по-настоящему ответ слишком широк и основан на мнениях. – hagrawal

+0

@hagrawal хорошо, это правда, что он мог иметь в виду именно это, хотя я в этом сомневаюсь. Во всяком случае, я думаю, что я рассмотрел оба дела. Я думаю, что это разумный вопрос. –

6

Ваш профессор, вероятно, имел в виду, что лучше бросить SomeTypeException, чем бросать Exception с некоторым текстовым сообщением.

Почему лучше использовать типизированное исключение?

  1. Вы можете перехватывать исключения определенных типов.

    try { 
        ... 
    } catch(ExceptionType1 e) { 
        ... 
    } catch(ExceptionType2 e) { 
        ... 
    } 
    
  2. Типы исключений брошенных метода дает ценную информацию для программиста о методе.

    void someMethod() throws SQLException, ParserException { ... } 
    

    является более значимым, чем:

    void someMethod() throws Exception { ... } 
    
+0

Это делает его лучше. Обычно он говорит что-то и говорит: «Не спрашивай, почему, просто знай, что это правда», но я не могу не задаться вопросом о более широком объяснении. Благодаря! – Mariela

1

Мои два цента:

Исключения, как и любая другая часть API, должна быть как можно более конкретным. Это по той же причине, почему вы должны использовать конкретные типы как String, Integer или Date вместо простых Object s.

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