|
|
|
улучшенная обработка исключение в java 7
|
|||
|---|---|---|---|
|
#18+
http://docs.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html#rethrow In detail, in Java SE 7 and later, when you declare one or more exception types in a catch clause, and rethrow the exception handled by this catch block, the compiler verifies that the type of the rethrown exception meets the following conditions: The try block is able to throw it. There are no other preceding catch blocks that can handle it. It is a subtype or supertype of one of the catch clause's exception parameters. Что хотели сказать этой строчкой? авторThere are no other preceding catch blocks that can handle it ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2014, 18:37 |
|
||
|
улучшенная обработка исключение в java 7
|
|||
|---|---|---|---|
|
#18+
Исключения обрабатываются по принципу "первый подходящий" (порядок следования в тексте программы), а не по принципу "наиболее подходящий" (иерархия наследования). Соответственно, если родительский тип в блоке catch (текстуально) предшествует дочернему, то "более подходящий" блок catch с этим дочерним типом не будет использован, а компилятор объявит такую последовательность ошибкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2014, 19:24 |
|
||
|
улучшенная обработка исключение в java 7
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, а разве в тексте про это написано? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2014, 22:29 |
|
||
|
улучшенная обработка исключение в java 7
|
|||
|---|---|---|---|
|
#18+
Почему в тексте про новую фичу (возможность перечислить несколько типов исключений в одном блоке catch) должны объясняться базовые вещи языка, которые читающий и так должен знать??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 03:09 |
|
||
|
улучшенная обработка исключение в java 7
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, согласен, поэтому мне и кажется упоминание этой штуки в этой статье. И вообще я не уверен, что речь именно об этой штуке. ещё раз читаем.Вот мой вольный перевод: ....компилятор проверяет что тип rethrown exception отвечает следующим условиям -... -There are no other preceding catch blocks that can handle it. Отстутвуют предшествующие catch блоки которые могут его обработать. -... Теперь как я это понял: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Мне кажется, что тут я нарушил это правило, а компилятор молчит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 12:34 |
|
||
|
улучшенная обработка исключение в java 7
|
|||
|---|---|---|---|
|
#18+
**согласен, поэтому мне и кажется упоминание этой штуки в этой статье странным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 12:35 |
|
||
|
улучшенная обработка исключение в java 7
|
|||
|---|---|---|---|
|
#18+
redwhite90Мне кажется, что тут я нарушил это правило, а компилятор молчитВы путаетесь в иерархии: IOException - предок, FileNotFound - потомок. Конкретно предка вы обрабатываете так, а все остальные исключения ввода-вывода - эдак. Именно в таком порядке они и указаны в тексте. Так как любое исключение ввода-вывода может быть приведено к (родительскому) IOException, то можно, не конкретизируя, указать его в блоке catch. Этот блок и перехватит все исключения ввода-вывода. Если после такого блока поставить ещё один catch-блок с более конкретным типом (ФилеНотФоунд, например), то компилятор укажет, что второй блок недостижим, а такой мёртвый код считается ошибкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 13:03 |
|
||
|
улучшенная обработка исключение в java 7
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, ну хватит уже. Не путюсь я в иерархии. Попробуйте понять мысль, которую я до ва донесит хочу. авторtype of the rethrown exception meets the following conditions: ещё раз напишу, чтобы точно было видно авторtype of the rethrown exception Давайте я немного поясню фичу о которой идёт речь. Я начинаю сомневать в том, что вы ее понимаете. Код: java 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 14:13 |
|
||
|
улучшенная обработка исключение в java 7
|
|||
|---|---|---|---|
|
#18+
redwhite90Давайте я немного поясню фичу о которой идёт речь. Я начинаю сомневать в том, что вы ее понимаете. Код: java 1. 2. 3. 4. 5. 6. 7. Кстати, это и есть ответ на Ваш вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 14:40 |
|
||
|
улучшенная обработка исключение в java 7
|
|||
|---|---|---|---|
|
#18+
Ну чтобы совсем было понятно: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 14:49 |
|
||
|
улучшенная обработка исключение в java 7
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев, а можно для тех кто в танке ещё раз объяснить. в доке, на которую я ссылаюсь написано авторкомпилятор проверяет что тип rethrown exception отвечает следующим условиям: -There are no other preceding catch blocks that can handle it. Не понимаю, правда. Как компилятор проверяет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 15:13 |
|
||
|
улучшенная обработка исключение в java 7
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев, ну то есть по вашему примеру этот пункт как раз таки не выполняется ибо вываливаем FileNotFounException и пишем его во throws, который уже отлавливаем. Ожидаемый результат - ошибка компиляции. разве нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 15:25 |
|
||
|
улучшенная обработка исключение в java 7
|
|||
|---|---|---|---|
|
#18+
redwhite90, так 6 компилит, а 7ка вешает варнинг: javacTest.java:10: warning: unreachable catch clause } catch (IOException e) { ^ thrown type FileNotFoundException has already been caught надо только не путать rethrown и throw new. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 15:29 |
|
||
|
улучшенная обработка исключение в java 7
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев, в принципе на оригинальном примере тоже самое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 15:31 |
|
||
|
улучшенная обработка исключение в java 7
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев, да тут по ходу в другом дело. автор...src\main\java\exceptionsAndAssertions>javac RethowTest.java RethowTest.java:13: unreported exception java.io.IOException; must be caught or declared to be thrown throw e; ^ 1 error а в еклипсе вполне себе работает: авторpublic class RethowTest { public static void main(String[] args) throws FileNotFoundException { try { throw new FileNotFoundException(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { throw e; } } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 16:15 |
|
||
|
улучшенная обработка исключение в java 7
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 16:16 |
|
||
|
улучшенная обработка исключение в java 7
|
|||
|---|---|---|---|
|
#18+
redwhite90, я не ту ошибку скопировал javacTest.java:15: error: exception FileNotFoundException has already been caught } catch (FileNotFoundException e) { вылезает на Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. В обратном порядке не вылезает. Если же оставить только один throw new FileNotFoundException(); то компилятор догадывается, что других не будет и Код: java 1. 2. 3. 4. 5. Все равно решит, что перехвачено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 17:28 |
|
||
|
улучшенная обработка исключение в java 7
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев, Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. тут то ежу понятно, что нет смысла отлавливать более специфичный эксепшн после более общего. А по поводу именно такого кода: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Эклипс, который смотрит на 7 джаву - работает. из cmd: авторD:\DNN-Project\DNN-Project\src\main\java\exceptionsAndAssertions>java -version java version "1.7.0_60" Java(TM) SE Runtime Environment (build 1.7.0_60-b19) Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode) D:\DNN-Project\DNN-Project\src\main\java\exceptionsAndAssertions>javac RethowTest.java RethowTest.java:13: unreported exception java.io.IOException; must be caught or declared to be thrown throw e; ^ 1 error онлайн компилятор1: http://ideone.com/Cw8zlk - работает(не ясно на какой он джаве) онлайн компилятор2: http://www.compileonline.com/compile_java_online.php выдает другой результат: авторHelloWorld.java:9: warning: unreachable catch clause } catch (IOException e) { ^ thrown type FileNotFoundException has already been caught 1 warning ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 17:41 |
|
||
|
улучшенная обработка исключение в java 7
|
|||
|---|---|---|---|
|
#18+
Всё равно не понял ваших проблем ... В некоторых случаях компилятор может проанализировать фактический тип проверяемых исключений и позволить некоторую неряшливость. В вашем примере: Код: sql 1. 2. 3. Формально - нарушение спецификации исключений, фактически - нет, если анализ пропущенного текста показывает, что ничего кроме IOException в ex оказаться не может. Или что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 17:56 |
|
||
|
улучшенная обработка исключение в java 7
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, Это человеку понятно, он не может понять из англицкого текста, что rethrow в блоке catch может быть в другом блоке try (обертывающем первый try...catch) и соответственно быть им поймана, а посему может не выноситься в описание метода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 18:16 |
|
||
|
улучшенная обработка исключение в java 7
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньевrethrow в блоке catch может быть в другом блоке try (обертывающем первый try...catch) и соответственно быть им поймана, а посему может не выноситься в описание метода.Так, вроде, всегда было. В каком месте тут улучшение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 18:29 |
|
||
|
улучшенная обработка исключение в java 7
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев, как вы из этого авторThere are no other preceding catch blocks that can handle it. это поняли? авторrethrow в блоке catch может быть в другом блоке try (обертывающем первый try...catch) и соответственно быть им поймана, а посему может не выноситься в описание метода. ================== Немного в сторону, но заметьте что этот код в отличии от версии(подверсии) седьмой джавы может вернуть либо варнинг либо ошибку компиляции Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 18:35 |
|
||
|
улучшенная обработка исключение в java 7
|
|||
|---|---|---|---|
|
#18+
в 1.7.0_60-b19 эта фича вообще не работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 18:41 |
|
||
|
улучшенная обработка исключение в java 7
|
|||
|---|---|---|---|
|
#18+
в 1.7.0_60-b19 эта фича вообще не работает - ошибся? на самом деле это была 1.6. Видимо ответ на изначальный вопрос такой: компилятор действительно проверяет достижимость catch блоков более продвинуто, чем в 6 джаве и генерирует, внимание, WARNING если catch блок недостижим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 19:09 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2126650]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
163ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 495ms |

| 0 / 0 |
