Почему исключения Java Runtime не проверяются в Java? - PullRequest
6 голосов
/ 01 ноября 2009

Почему имеет смысл иметь исключения Runtime UnChecked (в отличие от Checked )?

Ответы [ 3 ]

17 голосов
/ 01 ноября 2009

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

Другими словами, представьте себе код:

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

придется проверять ClassCastException, ArrayIndexOutofBoundsException, ArithmeticException, UnsupportedOperationException и NullPointerException на макушке.

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

Никто не утверждает, что непроверенные исключения - это плохо.

8 голосов
/ 01 ноября 2009

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

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

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

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

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

1 голос
/ 01 ноября 2009

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

...