1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wizardforcel-thinking-in-java-zh

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
9.1 基本异常.md 8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 11.03.2025 09:15 d56454c

9.1 Базовые исключения

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

Примером может служить "деление на ноль". Если возможно деление на ноль, необходимо проверять это, чтобы гарантировать, что программа не пойдет дальше и выполнит деление в такой ситуации. Но как узнать, что знаменатель равен нулю? В данном методе, в рамках задачи, которую мы пытаемся решить, мы можем знать, как обрабатывать нулевой знаменатель. Однако если значение неожиданно, его нельзя обработать, поэтому требуется создание исключения вместо продолжения выполнения программы.При создании исключения происходят несколько действий. Во-первых, объект исключения создаётся таким же образом, как и Java-объект: в "куче" памяти с помощью new. Затем прекращается текущее выполнение пути (помните, что продолжать по этому пути нельзя), а затем ссылка на объект исключения выпускается из текущего окружения. В этот момент система контроля исключений берёт управление и начинает поиск подходящего места для продолжения выполнения программы. Это место называется "обработчиком исключений", который отвечает за восстановление после проблемы, позволяя программе либо попробовать другой путь выполнения, либо просто продолжить работу.Как пример создания исключения, рассмотрим объект-ссылку t. Иногда программа может передать ссылку, которая ещё не была проинициализирована. Поэтому лучше всего провести проверку до вызова метода этим объектом-ссылкой. Информация о ошибке может быть отправлена в более широкий контекст путём создания специального объекта, представляющего нашу информацию, и выброса этого объекта ("throw") из нашего текущего контекста. Это называется "вызов исключения" или "бросание исключения". Вот пример:

if(t == null) {
    throw new NullPointerException();
}

Таким образом, мы "бросаем" исключение. В данном контексте это позволяет нам отказаться от дальнейших попыток решения проблемы и передать её в более подходящее место. Именно там она вскоре будет обнаружена.

9.1.1 Параметры исключения

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

if (t == null) {
    throw new NullPointerException("t = null");
}

Позднее, строка может быть извлечена различными способами, как будет показано ниже.Здесь ключевое слово throw выполняет ряд удивительных действий. Во-первых, оно выполняет выражение new, создавая объект, который находится вне обычной области выполнения программы. Затем вызывается конструктор для этого объекта. После этого объект фактически возвращается из метода — хотя его тип обычно не совпадает с тем, что был задуман при проектировании метода. Чтобы лучше понять механизм управления исключениями, можно представить его как ещё одну систему возврата значений — но не стоит углубляться слишком далеко, чтобы избежать проблем. Бросая исключение, мы также можем выйти из текущей области видимости, но сначала будет возвращено значение, после чего метод или область видимости завершится.Однако схожесть с обычным возвратом значений заканчивается здесь, поскольку место, куда мы возвращаемся, отличается от места, где происходит обычный возврат значения (мы завершаемся в правильном контроллере исключений, который может находиться довольно далеко от места броска исключения — на несколько уровней ниже в стеке вызовов).

Кроме того, мы можем выбрасывать любые "выброшенные" объекты нужного типа. Обычно мы выбрасываем различные типы исключений для различных типов ошибок. Мы храним информацию в объектах исключений и выбранных типах исключений, поэтому кто-то в большем контексте сможет знать, как обращаться с нашими исключениями (обычно единственная информация — это тип объекта исключения, а содержимое самого объекта исключения не имеет особого значения).

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/wizardforcel-thinking-in-java-zh.git
git@api.gitlife.ru:oschina-mirror/wizardforcel-thinking-in-java-zh.git
oschina-mirror
wizardforcel-thinking-in-java-zh
wizardforcel-thinking-in-java-zh
master