Nano Hash - криптовалюты, майнинг, программирование

Разница между непроверенным исключением и исключением во время выполнения

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


  • Ваш заголовок говорит нечто иное, чем вопрос. Хотите узнать о разнице между RuntimeException и Error или между Unchecked и RuntimeException? 23.04.2010
  • Это не Разница между X или Y, а Разница между X и Y. И действительно, между непроверенным исключением и исключением во время выполнения или между непроверенным исключением и ошибкой? 23.04.2010
  • Похоже, этот же вопрос на собеседовании задают часто: ошибки и непроверенные исключения в java">stackoverflow.com/questions/2693329/ 23.04.2010

Ответы:


1

Как следует из их названия, непроверенные исключения не проверяются во время компиляции, что означает, что компилятору не требуются методы для их перехвата или указания (с помощью throws) . Классы, относящиеся к этой категории, подробно описаны в разделе 11.2. Проверка исключений во время компиляции JLS:

К классам непроверенных исключений относятся класс RuntimeException и его подклассы, а также класс Error и его подклассы. Все остальные классы исключений являются проверяемыми классами исключений. API Java определяет ряд классов исключений, как проверенных, так и непроверенных. Дополнительные классы исключений, как проверенные, так и непроверенные, могут быть объявлены программистами. Описание иерархия классов исключений и некоторые классы исключений, определенные Java API и виртуальной машиной Java.

На следующем рисунке показана иерархия исключений:

альтернативный текст

Класс Error и его подклассы являются исключениями, от которых обычно не ожидается восстановления обычных программ, и, как объяснено в 11.5 Иерархия исключений:

Класс Error является отдельным подклассом Throwable, отличным от Exception в иерархии классов, чтобы позволить программам использовать идиому:

} catch (Exception e) {

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

Подводя итог, можно сказать, что RuntimeException — это подмножество непроверенных исключений для исключений, из которых возможно восстановление (но непроверенное исключение не является синонимом RuntimeException, как многие отвечают здесь).

23.04.2010

2

JavaDocs суммирует это довольно хорошо.

java.lang.RuntimeException:

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

Метод не обязан объявлять в своем предложении throws какие-либо подклассы RuntimeException, которые могут быть выброшены во время выполнения метода, но не перехвачены.

java.lang.Error:

Ошибка — это подкласс Throwable, который указывает на серьезные проблемы, которые разумное приложение не должно пытаться отловить. Большинство таких ошибок являются ненормальными условиями. Ошибка ThreadDeath, хотя и является нормальным состоянием, также является подклассом ошибки, поскольку большинству приложений не следует пытаться ее перехватить.

Метод не обязан объявлять в своем предложении throws какие-либо подклассы Error, которые могут быть выброшены во время выполнения метода, но не обнаружены, поскольку эти ошибки являются ненормальными условиями, которые никогда не должны возникать.

Обратите внимание, что непроверенное исключение — это просто синоним RuntimeException.

23.04.2010
  • java.sun.com/docs/books/tutorial/essential/ исключения/ также дает достойное описание различий 23.04.2010
  • Я думаю, что написание этого непроверенного исключения как синонима RuntimeException вводит в заблуждение (и просто неверно). 23.04.2010
  • @Паскаль, как так? Я думаю, что всякий раз, когда кто-то ссылается на непроверенное исключение в Java, он ссылается на какой-то подкласс RuntimeException, не так ли? 23.04.2010
  • Непроверенное исключение - это... непроверенное исключение, а классы непроверенных исключений - это класс RuntimeException и его подклассы и класс Error и его подклассы. Не знаю что добавить, unchecked exception просто не синоним RuntimeException. 24.04.2010

  • 3

    Примечание. RuntimeException ЯВЛЯЕТСЯ непроверяемым исключением.

    Непроверенным исключением будет то, о котором известно, что оно возможно в какой-то момент выполнения, но не перехвачено, например, NullPointerException всегда возможно, если вы не проверяете их, и это приведет к завершению вашей программы. Вы можете проверить это, обернув код в try-catch, но это не применяется (в отличие от проверенного исключения, которое будет принудительно обрабатывать исключение каким-либо образом).

    Ошибка — это то, что может произойти в любой момент во время выполнения и не может быть поймано, потому что она явно не вызвана конкретным вызовом метода и т. д. Например, OutOfMemoryError или StackOverflowError. И то, и другое может произойти в любое время и приведет к прекращению работы вашего приложения. Отлавливать эти ошибки не имеет смысла, поскольку они указывают на то, что произошло что-то, от чего вы не сможете избавиться.

    23.04.2010
  • Нет, все наоборот. Исключение во время выполнения ЯВЛЯЕТСЯ непроверенным исключением. 23.04.2010

  • 4

    Ошибки указывают на фундаментальные проблемы, которые никогда не должны возникать. Если вы столкнулись с ошибкой s.th. произошло действительно плохое.
    Непроверенные исключения (исключения времени выполнения), с другой стороны, используются всякий раз, когда можно было бы каким-то образом ожидать исключения, но нет разумного способа справиться с ним, и поэтому оператор try catch было бы просто раздражающим и пустой тратой места.

    23.04.2010
  • RuntimeException — это подмножество непроверенного исключения, а не синоним. 23.04.2010

  • 5

    Проверенное исключение:

    • Классы, расширяющие класс Throwable, кроме классов RuntimeException и Error, называются проверенными исключениями.
    • Также известно как исключение времени компиляции, потому что исключения такого типа проверяются во время компиляции. Это означает, что если мы проигнорируем это исключение (не обработанное с помощью try/catch или throw исключения), то произойдет ошибка компиляции.
    • Это программно восстанавливаемые проблемы, вызванные неожиданными условиями, не зависящими от кода (например, сбой базы данных, ошибка ввода-вывода файла, неправильный ввод и т. д.).
    • Мы можем избежать их, используя блок try/catch.
    • Пример: IOException, SQLException и т. д.

    Непроверенное исключение:

    • Классы, расширяющие RuntimeException, известны как непроверенные исключения.
    • Непроверенные исключения не проверяются во время компиляции, а проверяются во время выполнения. Поэтому их также называют "исключения во время выполнения".
    • Они также являются программно восстанавливаемыми проблемами, но в отличие от проверяемого исключения они вызваны ошибками в потоке кода или конфигурации.
    • Пример: ArithmeticException,NullPointerException, ArrayIndexOutOfBoundsException и т. д.
    • Поскольку они являются ошибкой программирования, их можно избежать с помощью красивого/умного кодирования. Например, "деление на ноль" происходит ArithmeticEceeption. Мы можем избежать их с помощью простого условия if - if(divisor!=0). Точно так же мы можем избежать NullPointerException, просто проверив ссылки - if(object!=null) или даже используя лучшие методы

    Ошибка:

    • Error относится к неисправимой ситуации, которая не обрабатывается с помощью try/catch.
    • Пример: OutOfMemoryError, VirtualMachineError, AssertionError и т. д.
    04.01.2015

    6

    Ошибка. Это исключительные условия, внешние по отношению к приложению, которые приложение обычно не может предвидеть или исправить.

    Исключение во время выполнения. Это исключительные условия, которые являются внутренними по отношению к приложению и которые приложение обычно не может предвидеть или исправить.

    Вы можете прочитать это:

    18.12.2013

    7

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

    Другие исключения вызывают ошибку компиляции, если они не перехвачены или не включены в список бросков.

    23.04.2010

    8

    Ошибки и исключения времени выполнения вместе называются непроверенными исключениями.

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

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

    http://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html

    Надеюсь, это поможет.

    27.01.2013
  • Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится. 18.08.2014
  • @ivarni Я обновил его, надеюсь, это поможет :) спасибо за отзыв. 18.08.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..