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

Вы не можете (разумно) назначить объект класса с const членами.

Вот почему вы получаете сообщение об ошибке оператора присваивания копий .

Вы не получаете жалобы на конструктор копирования.


В других новостях:

  • В C ++ Все имена UPPERCASE являются соглашение для макросов. Если они используются для чего-либо еще (например, констант, как в Java), вы увеличиваете риск конфликтов имен и случайной замены текста. Кроме того, это бельмо на глазу, прочитанное многими как дополнительный тяжелый акцент. Java не имеет препроцессора. У C ++ есть один.
  • Рекомендуется передавать аргументы не базового типа в качестве ссылки на const (вы добавили только const). Есть несколько дополнительных соображений для больших аргументов, которые копируются. В C ++ 11 они лучше всего передаются по значению и перемещаются.
  • Простая функция члена «getter» должна быть объявлена ​​const, чтобы они могли быть вызваны на объект const.

Что касается префиксов Get, основанных на Java, рассмотрим GetSin(u)+GetCos(v) по сравнению с sin(u)+cos(v). В Java префикс Get может иметь некоторое значение для инструментов, которые используют интроспекцию. Java имеет интроспекцию. У C ++ нет интроспекции. Используемые соглашения лучше адаптировать к используемому языку.

23
задан Razib 23 April 2015 в 20:20
поделиться

4 ответа

Throwable находится на вершине всех исключений. Под Throwable находятся Error и Exception. Под Exception находится RuntimeException.

В Java есть два типа исключений - проверенные и непроверенные. Проверенные исключения навязываются компилятором (вы должны объявить их в предложении throws и в конечном итоге поймать их). Непроверенные исключения не подлежат принудительной поимке или объявлению в выражении throws.

(Спорная часть ответа)

Throwable существует для того, чтобы у всех типов исключений был родитель. Вы никогда не должны объявлять, что бросаете Throwable, и никогда не ловить его (если только вы действительно не знаете, что делаете).

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

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

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

33
ответ дан 29 November 2019 в 00:56
поделиться

Данные ‎below показывают иерархию Классов исключений. Базовый класс для всех Объектов исключения java.lang.Throwable, вместе с его двумя подклассами java.lang.Exception и java.lang.Error.

enter image description here

  • Error класс описывает внутренние системные ошибки (например, VirtualMachineError, LinkageError), которые редко происходят. Если такая ошибка происходит, существует мало, что можно сделать, и программа будет завершена Средой выполнения Java.

  • Exception класс описывает ошибку, вызванную Вашей программой (например, FileNotFoundException, IOException). Эти ошибки могли быть зафиксированы и обработаны Вашей программой (например, выполнить альтернативное действие или делают корректный выход путем закрытия всех файлов, сети и соединений с базой данных).

Проверенный по сравнению с Непроверенным

Столь же проиллюстрированный, подклассы Error и RuntimeException известны, как снял флажок исключения. Эти исключения не проверяются компилятором, и следовательно, не должны быть пойманы или, как объявлять, выдаются в Вашей программе. Это вызвано тем, что нет очень, можно сделать за этими исключениями. Например, "делятся на 0" триггеров ArithmeticException, индекс массива из-связанного инициировал ArrayIndexOutOfBoundException, которые действительно программируют логические ошибки, которые должны быть зафиксированы в разовом скомпилированном, вместо того, чтобы оставить это обработке исключения на этапе выполнения.

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

RuntimeException и его подклассы не проверяются компилятором и не должен быть объявлен в подписи метода. Поэтому используйте их с осторожностью, поскольку Вам не сообщат и не можете знать об исключениях, которые могут произойти при помощи того метода (и поэтому не имейте надлежащих кодов обработки исключений), †“плохая практика разработки программного обеспечения.

источник здесь

0
ответ дан 25 September 2019 в 23:39
поделиться

Ответ TofuBeer ясно объясняет, что означают классы исключений.

Почему так много типов? Вместо этого Java может просто следовать простой схеме (просто попробовать / поймать все типы) для обработки ненормального состояния в программе?

Почему? Потому что они нужны! Без этих 4 классов обработка исключений по широкой категории была бы непрактичной.

  • Как бы вы отловили «все фатальные ошибки JVM» без класса Error ?
  • Как бы вы отловили «все исключения, которые не являются фатальными ошибками JVM» без Exception class?
  • Как бы вы отловили «все непроверенные исключения» без класса RuntimeException ?
3
ответ дан 29 November 2019 в 00:56
поделиться

Исключения времени выполнения предоставляют вам гибкость для избегать ловли, объявляя исключения.

0
ответ дан 29 November 2019 в 00:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: