Преимущества исключений в языке программирования Java

Bookmark and Share this Article Original English article

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

Преимущество 1: Разделение Ошибка - Обработка кодекса "Регулярная" Кодекс

Исключения предусматривать средства для отдельных деталей, что делать, когда что-то из простых происходит от основной логики программы. В традиционных программ, ошибка обнаружения, отчетность и обработка часто приводит к путанице спагетти кода. Рассмотрим, например, метод pseudocode, что читает весь файл в память:

readFile (
открыть файл;
определения ее размера;
передать, что много памяти;
прочитать файл в память;
закрыть файл;
)

На первый взгляд, эта функция кажется достаточно простой, но он игнорирует все следующие возможные ошибки:

• Что произойдет, если файл не может быть открыт?

• Что произойдет, если длина файла не может быть определена?

• Что произойдет, если достаточно памяти не могут быть выделены?

• Что происходит, если, не читать?

• Что произойдет, если файл не может быть закрытой?

Для рассмотрения таких дел, в readFile функции должны быть больше, делать ошибки обнаружения, отчетности и обработки. Вот пример того, что функция может выглядеть так:

errorCodeType readFile (
инициализировать errorCode = 0;

открыть файл;
если (theFileIsOpen) (
определить длину файла;
если (gotTheFileLength) (
передать, что много памяти;
если (gotEnoughMemory) (
прочитать файл в память;
если (readFailed) (
errorCode = -1;
)
) еще (
errorCode = -2;
)
) еще (
errorCode = -3;
)
закрыть файл;
если (theFileDidntClose и и errorCode == 0) (
errorCode = -4;
) еще (
errorCode = errorCode и -4;
)
) еще (
errorCode = -5;
)
вернуться errorCode;
)

Там так много ошибок выявлению, и возвращение, что подлинные семь строк кода теряются в беспорядок. Что еще хуже, логический поток код также было потеряно, тем самым затрудняя ли код делает правильно: Является ли файл действительно закрыт, если функция не сможет выделить достаточно памяти? Это еще более сложно обеспечить, чтобы код продолжает делать правильно при изменении метода трех месяцев после его написания. Многие программисты решить эту проблему, просто игнорируя iterrors сообщениям, когда их программ катастрофы.

Исключения позволяют писать основной поток кода и заниматься в других исключительных случаях. Если readFile функция используется вместо исключения традиционных ошибок методы управления, он больше похожи на следующие:

readFile (
попытаться (
открыть файл;
определения ее размера;
передать, что много памяти;
прочитать файл в память;
закрыть файл;
) улова (fileOpenFailed) (
doSomething;
) улова (sizeDeterminationFailed) (
doSomething;
) улова (memoryAllocationFailed) (
doSomething;
) улова (readFailed) (
doSomething;
) улова (fileCloseFailed) (
doSomething;
)
)

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

Преимущество 2: Ошибки распространения вверх по Call Stack

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

method1 (
слово method2;
)

method2 (
слово method3;
)

method3 (
слово readFile;
)

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

method1 (
errorCodeType ошибки;
ошибка = слово method2;
если (ошибка)
doErrorProcessing;
остальное
приступить;
)

errorCodeType method2 (
errorCodeType ошибки;
ошибка = слово method3;
если (ошибка)
вернуться ошибки;
остальное
приступить;
)

errorCodeType method3 (
errorCodeType ошибки;
ошибка = слово readFile;
если (ошибка)
вернуться ошибки;
остальное
приступить;
)

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

method1 (
попытаться (
слово method2;
) улова (исключением е) (
doErrorProcessing;
)
)

method2 бросает исключение (
слово method3;
)

method3 бросает исключение (
слово readFile;
)

Однако, как показывает pseudocode, ducking исключение требует некоторых усилий со стороны этого посредника методов. Любые проверки исключений, которые могут быть брошены в рамках метода должно быть указано в его tHRows положение.

Преимущество 3: Дифференциация категории и типы ошибок

Поскольку все исключения брошены в программе объектов, группировки или классификации исключений является естественным результатом класс иерархии. Примером группы связанных исключением классов в Java платформы, определены в java.ioIOException и его потомков. IOException носит самый общий и представляет собой любой тип ошибки, которые могут возникнуть при выполнении I / О. Его потомки представляют более конкретные ошибки. Например, FileNotFoundException означает, что файл не может быть расположена на диске.

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

улова (FileNotFoundException е) (
...
)

А способ исключением вылова на основе своей группы или общего типа, с указанием любого из исключения в superclasses в улове заявление. Например, чтобы охватить все I / O исключения, независимо от их конкретного типа, исключение обработчик задает IOException аргумент:

улова (IOException е) (
...
)

Этот обработчик сможет охватить все I / O исключения, в том числе FileNotFoundException, EOFException, и так далее. Вы можете найти подробную информацию о том, что в результате опроса аргумент передается в обработчик исключения. Например, используйте следующий печатать пачки след:

улова (IOException е) (
e.printStackTrace (); / / Результат выходит на System.err.
e.printStackTrace (System.out); / / Отправить следов на stdout.
)

Можно даже создать обработчик исключений, которые обрабатывает любые исключения с обработчик здесь:

улов (Исключение е) (/ / A (слишком) общее исключение обработчику
...
)

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

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

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

это статья добавлена Клаин Бренд
Опровержение: Наш сайт не несет ответственности за информацию, содержащуюся в этой статье. Эта статья никоим образом не отражает взгляды, мнения, мысли или веры каталог статей сотрудников.

Перевод уведомления: В статье "Преимущества исключений в языке программирования Java" был переведен с использованием автоматизированной службы перевода. Мы приносим извинения за любые ошибки перевода, что произошло. Спасибо за понимание.


  Online: 803 users browsing the articles directory © 2005-2010 E-articles.info All Rights Reserved.  
The articles and tutorials in the directory are property of their respective owners and authors.