"Anomaly condition" указывает на ситуацию, при которой следует прекратить выполнение метода или области действия. Чтобы отличать условия исключений от обычных проблем, очень важно понимать эти условия. В случае обычной проблемы мы уже располагаем достаточной информацией, чтобы решить возникшую проблему в какой-то степени. Однако при условии исключения продолжить выполнение невозможно, так как недостаточно информации для решения проблемы. В этом случае единственным действием является выход из текущего контекста и передача этой проблемы более высокому уровню управления. Это то, что происходит при возникновении исключения.
Примером может служить "деление на ноль". Если возможно деление на ноль, необходимо проверять это, чтобы гарантировать, что программа не пойдет дальше и выполнит деление в такой ситуации. Но как узнать, что знаменатель равен нулю? В данном методе, в рамках задачи, которую мы пытаемся решить, мы можем знать, как обрабатывать нулевой знаменатель. Однако если значение неожиданно, его нельзя обработать, поэтому требуется создание исключения вместо продолжения выполнения программы.При создании исключения происходят несколько действий. Во-первых, объект исключения создаётся таким же образом, как и Java-объект: в "куче" памяти с помощью new
. Затем прекращается текущее выполнение пути (помните, что продолжать по этому пути нельзя), а затем ссылка на объект исключения выпускается из текущего окружения. В этот момент система контроля исключений берёт управление и начинает поиск подходящего места для продолжения выполнения программы. Это место называется "обработчиком исключений", который отвечает за восстановление после проблемы, позволяя программе либо попробовать другой путь выполнения, либо просто продолжить работу.Как пример создания исключения, рассмотрим объект-ссылку t. Иногда программа может передать ссылку, которая ещё не была проинициализирована. Поэтому лучше всего провести проверку до вызова метода этим объектом-ссылкой. Информация о ошибке может быть отправлена в более широкий контекст путём создания специального объекта, представляющего нашу информацию, и выброса этого объекта ("throw") из нашего текущего контекста. Это называется "вызов исключения" или "бросание исключения". Вот пример:
if(t == null) {
throw new NullPointerException();
}
Таким образом, мы "бросаем" исключение. В данном контексте это позволяет нам отказаться от дальнейших попыток решения проблемы и передать её в более подходящее место. Именно там она вскоре будет обнаружена.
Как и любой другой объект Java, исключение должно быть создано с помощью ключевого слова new
в куче памяти и вызван конструктор. Для всех стандартных исключений существует два конструктора: первый — это конструктор по умолчанию, второй требует строкового аргумента, который позволяет нам помещать информацию в исключение:
if (t == null) {
throw new NullPointerException("t = null");
}
Позднее, строка может быть извлечена различными способами, как будет показано ниже.Здесь ключевое слово throw
выполняет ряд удивительных действий. Во-первых, оно выполняет выражение new
, создавая объект, который находится вне обычной области выполнения программы. Затем вызывается конструктор для этого объекта. После этого объект фактически возвращается из метода — хотя его тип обычно не совпадает с тем, что был задуман при проектировании метода. Чтобы лучше понять механизм управления исключениями, можно представить его как ещё одну систему возврата значений — но не стоит углубляться слишком далеко, чтобы избежать проблем. Бросая исключение, мы также можем выйти из текущей области видимости, но сначала будет возвращено значение, после чего метод или область видимости завершится.Однако схожесть с обычным возвратом значений заканчивается здесь, поскольку место, куда мы возвращаемся, отличается от места, где происходит обычный возврат значения (мы завершаемся в правильном контроллере исключений, который может находиться довольно далеко от места броска исключения — на несколько уровней ниже в стеке вызовов).
Кроме того, мы можем выбрасывать любые "выброшенные" объекты нужного типа. Обычно мы выбрасываем различные типы исключений для различных типов ошибок. Мы храним информацию в объектах исключений и выбранных типах исключений, поэтому кто-то в большем контексте сможет знать, как обращаться с нашими исключениями (обычно единственная информация — это тип объекта исключения, а содержимое самого объекта исключения не имеет особого значения).
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )