2009-11-01 1 views

ответ

17

Если вы этого не сделали, вам придется иметь блоки try/catch при каждом доступе к элементу массива, выполнять операцию разделения и многие другие распространенные сценарии.

Иными словами, представьте себе этот код:

Map map = ... 
int i = ... 
(int[])map.get("foo")[3] = 2334/i; 

пришлось бы проверить ClassCastException, ArrayIndexOutofBoundsException, ArithmeticException, UnsupportedOperationException и NullPointerException в непосредственной близости от верхней части моей головы.

С Java проблема не в контрольных исключениях. Проверенные исключения являются весьма спорным предметом. Некоторые говорят, что это был в значительной степени эксперимент с Java, и на практике они не работают, но вы найдете много людей, которые утверждают, что они хороши.

Никто не спорит о непроверенных исключениях.

+0

«Никто не спорит о непроверенных исключениях, однако плохо», - вы были бы удивлены :-) Большой +1 на все остальное. – ChssPly76

+0

благодарит @cletus. – Moeb

+6

На самом деле, если Runtime Exception были проверены, было бы сложно обрабатывать исключения в любом случае, так как почти все, что вы могли бы сделать в блоке catch, могло бы вызвать новые исключения времени выполнения, которые, в свою очередь, придется обрабатывать ... –

1

Это просто означает, что компилятор не заставит вас искать исключение, но вы все равно можете выбросить его во время выполнения. В качестве одного из преимуществ это позволяет вам выкидывать новые исключения из ваших классов, не требуя изменения вашего интерфейса, заставляя вызывающих абонентов изменять свой код.

8

Идея двух видов исключений в Java (проверяется и не проверена) заключается в том, что проверенные исключения должны использоваться для условий ошибки, которые можно разумно ожидать, и исключенные исключения должны использоваться для непредвиденных условий ошибки.

Например, если файл не найден, вы получите FileNotFoundException, и разумно ожидать, что ваша программа сможет обрабатывать такое условие. Непроверенные исключения должны использоваться только для проблем, которые не должны происходить, и это действительно означает, что в программе есть ошибка, если такая проблема возникает. Например, NullPointerException означает, что ваша программа пытается разыменовать переменную null, и это, скорее всего, ошибка.

Компилятор Java заставляет программиста обрабатывать проверенные исключения. Это делает язык программирования более безопасным - это означает, что программист вынужден думать об ошибках, что должно сделать программу более надежной.

Компилятор не проверяет необработанные исключения, поскольку неконтролируемые исключения не должны произойти в любом случае, и если они это сделают, нет ничего, что программа могла бы разумно выполнить во время выполнения; программист должен решить проблему.

Была некоторая критика этой функции на Java, некоторые люди даже называют проверенные исключения a failed experiment и некоторые люди propose to remove checked exceptions с Java.

+0

+1 для этого аккуратное описание. – Reuben

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

  • Нет связанных вопросов^_^