Любое простое объяснение для веской причины изменить параметр исключения ex в предложении Java catch? - PullRequest
0 голосов
/ 02 декабря 2018

Прочитав 2 источника и другие потоки stackoverflow, я все еще не мог понять, почему параметр исключения ex должен быть изменяемым (любой редкий случай подходит для цели, может быть примером ответа), любой мог бы рассказать хороший сценарий / время, чтобыизменить параметр ex?И какой смысл в спецификации языка Java.сказать "эффективно окончательно"?

предложение uni-catch означает, что должно быть поймано только 1 исключение?

catch (IOException ex) 

против новых в JAVE SE 1.7 новых функций для множественной ловли, таких как

catch (IOException|SQLException ex)

становитесь все более запутанными после прочтения приведенных ниже постов ... кто-нибудь может дать простое прямое объяснение этого вопроса.

параметр исключения uni-catch может быть окончательным?

Почему параметр catch неявно является окончательным?

https://docs.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html

Примечание. Если блок catch обрабатывает более одного типа исключения, тогда параметр catch неявно является окончательным.В этом примере параметр catch ex является окончательным, и поэтому вы не можете присвоить ему какие-либо значения в блоке catch.

https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.12.4 ... и параметр исключения из условия multi-catch§14.20).Параметр исключения в предложении uni-catch никогда не объявляется окончательно неявным образом, но может фактически быть окончательным.

1 Ответ

0 голосов
/ 02 декабря 2018

Для части об изменении перехваченного исключения:

  1. Это на самом деле не обычная практика.Вы не найдете много людей, выступающих за это.
  2. Могут быть ситуации, когда у вас есть собственный класс исключений, в котором есть определенная информация.Может быть, эта информация не известна для бросания кода.Но код перехватывает его и добавляет к объекту исключения.Чтобы затем записать это исключение или перебросить его «обогащенными» данными.

Что касается других пунктов:

  1. Тот факт, что вы теперь можете делать мульти-улов, не имеет к этому никакого отношения.Но очевидно, что multi catch делает менее интересным изменение пойманного исключения.
  2. Фактически окончательный означает, что компилятор может обнаружить, что локальная переменная не переназначена.Переменная является окончательной, но вы не поставили это ключевое слово перед объявлением.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...