2014-02-12 3 views
-4

Я знаю, что javac заставляет программиста обрабатывать проверенные исключения, которые нужно бросить методом или обрабатывать с помощью try-catch/finally. И это не остановит программиста от бросания неконтролируемого исключения.Java - Обработка исключений - throws

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

Но я не могу понять ниже:

Q1) Почему метод «выбрасывает» исключение. Какую выгоду мы получаем от этого? Я думаю, либо метод бросает, либо не бросает с помощью «бросков» то же самое происходит !!!

Q2) Что происходит внутри, когда метод «выбрасывает» исключение?

Q3) Я думаю, что «Ошибки» классифицируются иначе, чем «Исключения», только для того, чтобы выделить их как «со стороны программиста не будет многого, что нужно делать, когда они происходят», но мы можем сделать «броски» -catch/finally "для них, как обычно, и все остальное также похоже на« Исключение » * s. Пожалуйста, поправьте меня, если я ошибаюсь.

Пожалуйста, помогите мне. Заранее спасибо.

+0

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

+5

https://www.google.com/search?q=exceptions+java и особенно http://docs.oracle.com/javase/tutorial/essential/exceptions/ – aliteralmind

ответ

1

K здесь мы идем:

Q1) Почему метод "выбрасывает" исключение. Какую выгоду мы получаем от этого?

Метод должен упомянуть, что бросает исключения, когда он не может обработать исключение, что он кидает (метод должен указать это поведение так, что абоненты способа могут защитить себя от этого исключения).

Q2) Что происходит внутри, когда метод «выбрасывает» исключение?

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

Для вашего 3 вопроса прочитать этот блок, взятый из полного справочника:

Все типы исключений являются подклассами встроенного класса Throwable. Таким образом, Throwable находится наверху иерархии классов исключений. Непосредственно ниже Throwable есть два подкласса, которые разделяют исключения на две разные ветви. Один филиал возглавляет Exception. Этот класс используется для исключительных условий, которые пользовательские программы должны улавливать. Это также класс, который вы будете подклассы для создания собственных настраиваемых типов исключений. Существует важный подкласс Exception, называемый RuntimeException. Исключения этого типа автоматически определяются для программ, которые вы пишете, и включают такие вещи, как деление на ноль и недопустимое индексирование массива.

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

+0

Спасибо. Я понял это, пожалуйста, подтвердите: (1) Метод должен выбросить проверенное исключение, чтобы сообщить компилятору, что «я знаю, что это важно для обработки, но я оставляю эту ответственность вызывающему» (2) Мы можем обмануть компилятор при обработке проверенных исключений с помощью пустых блоков catch/finally (3) Метод генерирует исключение (отмечено или не отмечено), чтобы позволить вызывающему агенту лучше его обрабатывать. – Venkataswamy

+0

(4) Ошибки - это еще одна категория, отличающаяся от других двух типов: «RuntimeExceptions» и «CheckedExceptions» , Я уверен, что мы можем бросать или обрабатывать Ошибки, но я не понимаю, почему они говорят «Ошибки, которые не ожидали поймать» .... Я считаю, что всегда нужно будет выполнять некоторые операции по очистке до выхода из программы даже в случае серьезного таких как ошибки. – Venkataswamy

+0

Ваша (1) точка верна. Переход к точке (2) с использованием пустых блоков блокировки - это плохая практика, потому что вы будете проглатывать исключение. (3) метод точки бросает проверенное исключение, почему я говорю, что это все исключенные исключения - это исключения во время выполнения, а компилятор выиграл ' t заставляют вас проверять его в предложении try/catch. – iamyogish

Смежные вопросы