Простой вопрос о выражении try / catch - PullRequest
0 голосов
/ 08 апреля 2011

Если я добавлю это выражение try / catch в мой код:

try {
   ...
   method1();

} catch (Exception e) {
   call_method();

}

Я призываю "call_method()" для любого типа исключения, на любом уровне, таком как java.lang.NullPointerException внутри method1() .. верно?

спасибо

Ответы [ 7 ]

3 голосов
/ 08 апреля 2011

я вызываю "call_method ()" для любого тип исключения, на любом уровне такой как java.lang.NullPointerException внутри method1 () .. верно?

Да ........

1 голос
/ 08 апреля 2011

Да, это поймает все, что распространяется Exception.Особенно обратите внимание, что сюда входят RuntimeException и его множество подклассов (например, NullPointerException, как вы упомянули).

Он не будет перехватывать другие Throwable объекты, то есть Error и его множество подклассов.

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

0 голосов
/ 08 апреля 2011

Для любого исключения, сгенерированного в блоке try, вы будете вызывать call_method().

Это потому, что вы пытаетесь поймать общий Exception объект, а не какой-то конкретный объект, такой как NullPointerException.

Если вы попробуете что-то подобное,

try { 
  // ....
  method1();
 }
catch(NullPointerException e) {
  // ....
  call_method();
 }  

тогда, только когда у вас есть NullPointerException внутри блока try, ваш catch поймает его и ваш call_method() будет выполнен.

0 голосов
/ 08 апреля 2011

Да - для всего, что наследуется от исключения.Хотя в целом, если этот метод не делает что-то для обработки этого исключения, он обычно не считается «хорошей формой» (но я не пытаюсь предположить намерение человека).

Возможно, вы захотите взглянуть на Throwableа также: вот хорошее обсуждение для просмотра: Когда следует использовать Throwable вместо нового исключения?

0 голосов
/ 08 апреля 2011

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

Вы можете увидеть здесь:

http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Exception.html

Это исключение является классом верхнего уровня для исключений, в котором все в конечном итоге наследуется от.

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

0 голосов
/ 08 апреля 2011

Да, это правильно. Однако блок перехвата не сработает для ошибок, таких как OutOfMemoryError. Как правило, это то, что вам нужно, так как ошибки должны сигнализировать о фундаментальных проблемах, которые приложение не может устранить.

0 голосов
/ 08 апреля 2011

Это было бы устойчиво: Да! : -D

...