|
|
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
новичок_в_JavaТаким образом, если я правильно понял, throws это некий механизм самодокументирования кода возведённый до уровня обязательного синтаксического требования. Никакой иной функциональности он не несёт и никаких обязательств на разработчика (кроме синтаксических) не накладывает. Обладая этой информацией о вызываемых методах программист сам решает надо ли их обрабатывать (try-блок) или отправлять выше по call-стеку (писать throws). Не вижу в этом ничего связанного с "защищённостью" языка или "идеологией ООП". Как ничто не мешает необработанному экцепшну спокойно долететь до вершины стека вызовов и предстать в виде "красивого окошка с красной иконкой". Ну... здесь можно рассмотреть две крайности. Крайность №1 Все методы объявляюься как throws Exception Любая ситуация (потеря сетевого коннекта) вызывает откат стека до самой вершины с выбросом в консоль трассы методов. Например: IOException в сервлете "валит" WEB-сервер. Крайность №2 Все методы содержат захват и подавление любых видов исключений. Внешне такой код работает превосходно, но кодить его достаточно сложно, ибо не всегда можно определить реакцию вашего софта на исключения (их может быть от десятка до нескольких сотен), да и отлавливать ошибки в таком исходнике неудобно. Короче, необходимо искать золотую середину и определится с протоколом исключений. Сам-же протокол - это предмет многочисленных договорённостей (или контрактов) между группами разработчиков. И его следует выносить на обсуждение. Это нормальная практика для разработки различных tier в бизнес-логике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 21:50:41 |
|
||
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
авторИ что имеем в результате? Метод бросает исключение, а программа не знает что с ним делать (разработчик не знал об исключении или не захотел его обрабатывать). я думаю что стоит обратить внимание на ситуацию когда ваш метод бросает исключение а не чужой. Пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. в этом примере работа с исключениями это часть логики. Понятно что кроме PasswordInvalidException могут быть другие исключения, с сервером соединения нет или что ещё. И тот кто будет использовать ваш метод напишет что-то вроде Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Таким образом вы явно предупреждаете тех кто будет использовать ваш код о том какие могут быть ошибки и предлагаете это учесть. Хотя другие могут наплевать на ваши предупреждения и просто ловить Throwable. Я, кстати, так и делаю обычно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 22:35:26 |
|
||
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
1024Хотя другие могут наплевать на ваши предупреждения и просто ловить Throwable. Я, кстати, так и делаю обычно. Круто! А теперь предлагаю на пару секунд задуматься, что будет в случае возникновения, к примеру, OutOfMemory. И как оно обрабатывает Error, а также чем Error отличается от Exception. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 22:48:04 |
|
||
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
пусть лошадь думает. Я ж сказал, указывается разработчиком что может быть его собственное исключение. Кто-то может его использовать и обрабатывать, кто-то может забить. Это скорей элемент логики а не гарантия успешной отработки метода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 22:51:56 |
|
||
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
1024пусть лошадь думает. Я ж сказал, указывается разработчиком что может быть его собственное исключение. Кто-то может его использовать и обрабатывать, кто-то может забить. Это скорей элемент логики а не гарантия успешной отработки метода. Error, в отличие от Exception, элементом бизнес-логики не является, и забивать на него строго не рекомендуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 22:54:14 |
|
||
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
Зашедший 1024пусть лошадь думает. Я ж сказал, указывается разработчиком что может быть его собственное исключение. Кто-то может его использовать и обрабатывать, кто-то может забить. Это скорей элемент логики а не гарантия успешной отработки метода. Error, в отличие от Exception, элементом бизнес-логики не является, и забивать на него строго не рекомендуется. не рекомендуется забивать на Error? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 23:06:41 |
|
||
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
и? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 23:07:50 |
|
||
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
Вот цытато из JavaDocs: Sun MicrosystemsAn Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal conditions. The ThreadDeath error, though a "normal" condition, is also a subclass of Error because most applications should not try to catch it. A method is not required to declare in its throws clause any subclasses of Error that might be thrown during the execution of the method but not caught, since these errors are abnormal conditions that should never occur. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 23:07:54 |
|
||
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
и что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 23:08:15 |
|
||
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
чего-чего? Зашедший 1024пусть лошадь думает. Я ж сказал, указывается разработчиком что может быть его собственное исключение. Кто-то может его использовать и обрабатывать, кто-то может забить. Это скорей элемент логики а не гарантия успешной отработки метода. Error, в отличие от Exception, элементом бизнес-логики не является, и забивать на него строго не рекомендуется. не рекомендуется забивать на Error? В смысле тупо глушить его нельзя. "Забивать" ака "перехватывать и писать в лог". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 23:09:00 |
|
||
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
и сравни с тем что ты сказал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 23:09:15 |
|
||
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
Зашедший В смысле тупо глушить его нельзя. "Забивать" ака "перехватывать и писать в лог". зачем вообще перехватывать Error? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 23:10:31 |
|
||
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
а теперь ответь на вопрос Зашедший В смысле тупо глушить его нельзя. "Забивать" ака "перехватывать и писать в лог". зачем вообще перехватывать Error? Именно что незачем. Я как раз и написал, что код типа catch(Throwable) - это, мягко говоря, неверно. Перехватывать можно (и часто нужно) Exception, но никак не Error, а в случае с Throwable они тоже будут перехвачены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 23:12:54 |
|
||
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
ну добавь в cath(Error e) { throw e; } сути это не меняет. Исключения это не гарантия что вс отработает а элемент логики. Можно объявить и те кто будет использовать смогут поймать и обработать. Если захотят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 23:15:13 |
|
||
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
1024 сути это не меняет. что полезного в этой конструкции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 23:19:12 |
|
||
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
етитская сила! 1024 сути это не меняет. что полезного в этой конструкции? "Пацаны на раёне говорят, что так круче"(с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 23:28:14 |
|
||
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
полезного нет. Но раз в хелпе написано что Еррор нежелательно обрабатывать то можно передать его наверх. Вопрос был: зачем вообще этот throws в объявлении метода? я написал зачем. Какие-то тонкости или несоответствия - да, есть. Где их нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 23:31:58 |
|
||
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
Зашедший етитская сила! 1024 сути это не меняет. что полезного в этой конструкции? "Пацаны на раёне говорят, что так круче"(с) на раёне по.уй как то ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 23:42:26 |
|
||
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
1024полезного нет. Но раз в хелпе написано что Еррор нежелательно обрабатывать то можно передать его наверх. Вопрос был: зачем вообще этот throws в объявлении метода? я написал зачем. Какие-то тонкости или несоответствия - да, есть. Где их нет. Я заинтересовался целью объявления catch(Throwable) вместо catch(Exception), так как ч0ткие методы могут только Exception бросать. Или есть необходимость обрабатывать StackOverflow & OutOfMemory? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2007, 00:24:05 |
|
||
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
catch(OutOfMemoryError ooe) { System.err.println("дать писты разработчикам, опять ликов наоставляли"); throw ooe; } catch(LinkageError le) { System.err.println("удод, настрой пути к либам"); throw le; } как пример. Но это офтоп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2007, 00:41:31 |
|
||
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
по моему писать Код: plaintext 1. 2. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2007, 09:02:44 |
|
||
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
1024 Код: plaintext 1. 2. 3. 4. 5. 6. 7. А могут ли быть исключения частью логики? Как мне кажется, в вашем примере лучше отдельно оговорить, что пароль является правильным. И выбрасывать непроверяемое исключение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2007, 12:35:51 |
|
||
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
ну, зачем же они тогда нужны если их не кидать, не ловить и не обрабатывать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2007, 12:50:54 |
|
||
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
Зашедший Во-первых, слова "метод" я там не заметил, только слово "класс". Можно пример класса в котором несколько методов и один на весь класс блок try/catch? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2007, 12:51:19 |
|
||
|
зачем вообще этот throws в объявлении метода?
|
|||
|---|---|---|---|
|
#18+
авторВо-вторых обрабатывать все ошибки используя единственную и пустую секцию catch (Exception) - за такое в продакшн-коде надо сразу увольнять. Хуже только вариант с catch(Throwable) - как пример абсолютной и неизлечимой клиники. мне кажется нада менее категорично заявлять что можно а что нельзя. Мир широк. Пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2007, 13:05:28 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34767538&tid=2144755]: |
0ms |
get settings: |
13ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
84ms |
get tp. blocked users: |
2ms |
| others: | 309ms |
| total: | 489ms |

| 0 / 0 |
