Чем непроверенные исключения (ex C #) отличаются от исключений Java-esque? - PullRequest
2 голосов
/ 13 декабря 2010

Я видел много замечаний по поводу проверенных исключений Java, с учетом того, что что-то еще (часто C #) существенно отличается / превосходит в этом отношении.Меня не интересует аспект языковых войн, но я хотел бы знать, как языки без проверенных исключений отличаются от модели Java.Получите ли вы тот же результат, если измените все исключения Java для расширения RuntimeException?

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


Поскольку кто-то проголосовал за закрытие как за субъективный, я еще раз подчеркну: мне все равно на каком языке люди думают лучше.Я спрашиваю только о реальных операционных различиях, которые программистам придется кодировать при использовании разных моделей исключений.У меня есть только опыт работы с версией Java, поэтому я пытаюсь выяснить, как работает другой способ.

Ответы [ 3 ]

3 голосов
/ 13 декабря 2010

По существу нет различий между исключениями в двух языках.

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

C # не обрабатывает ни одно из своих исключений по-разному.NullReferenceException - это то же самое, что и IOException.

. При программировании на C # вы должны лучше знать, какие ошибки могут произойти, и какие вы можете устранить.Java упростит задачу, напомнив вам, что нужно разобраться со случаем, когда что-то из-под вашего контроля пошло не так.

1 голос
/ 13 декабря 2010

Основная проблема с проверенными исключениями состоит в том, что в некоторых (многих?) Случаях вы пишете код так, что исключение никогда не возникает, или вам все равно, если оно происходит, вынуждая пользователя «ловить» non-throwable или nonвосстанавливаемые исключения и тому подобное.Затем вы должны рассмотреть случай, когда пользователю все равно, заканчивается ли его приложение проверенным исключением, скажем, любителем или разработчиком.Теперь вам нужно пойти и пометить каждую функцию с каждым проверенным исключением, которое может когда-либо возникнуть, даже с теми, которые возникли бы, только если вы запустили марсианскую виртуальную машину Java с голубой луной.C ++ - это отличная идея, но язык имеет только самую примитивную реализацию, и количество метафорических волокит, окружающих все это, ужасно, до такой степени, что может быть проще просто не иметь ни черта.

Я не знаю ни одного другого языка, который бы проверял исключения.

В C ++ не генерируются примитивные операции и не многие из более сложных операций или библиотечных функций.В C ++, как правило, гораздо меньше исключений.Я не могу говорить за C #.Особенность C ++ заключается в том, что если вы получите необработанное исключение, ваш отладчик с легкостью сообщит вам, откуда оно пришло, сделав его относительно простым для поиска и устраняя необходимость в куче catch(something) { printfailure("funcname"); abort_program(); } повторяющихся уловов.

0 голосов
/ 13 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...