powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / зачем вообще этот throws в объявлении метода?
62 сообщений из 62, показаны все 3 страниц
зачем вообще этот throws в объявлении метода?
    #34764572
Здравствуйте.

Недавно изучаю Java и не могу понять практической пользы требования объявлять в описании метода :

throws и перечисление необрабатываемых, но возможных в нём экцепшнов

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

Поясните если кто знает, спасибо заранее.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34764596
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34764686
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут надо не Java изучать, а идеологию ООП. Чтобы понять ответ на этот вопрос. Ну а вообщем, весьма полезный механизм при написании устойчивых программ.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34764687
Anarion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А это для того, чтобы вышестоящие классы знали о том, что внизу произошла какая-то фигня-с.
Вот допустим у тебя есть класс работы с БэДэ. Ты обращаешься к нему, говоришь "сделай инсерт". А коннекшен в это время отваливается. Тогда ты выкидываешь эксцепшен через throw new DBException().
А слово throws в названии метода значит, что метод будет требовать от вышестоящего класса отловить этот самый эксцепшен.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34764725
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот смотри:
Копает рабочий лопатой яму. И вдруг лопата ломается. Что делать? Рабочий не может копать сломанной лопатой, но и не знает, где эти лопаты брать.
Тогда он идет к своему бригадиру и говорит "лопата сломалась" (передает ошибку наверх). А бригадир уже знает, где берутся лопаты, поэтому берет ее и отдает рабочему (обрабатывает ошибку).
Если ты пишешь класс "рабочий", который не знает, что делать с некоторыми ошибками. Ты должен описать их в throws, чтобы класс "бригадир" знал, какие проблемы могут возникнуть и быть готовым к нему. А вот классу "директор" уже о них знать не нужно - до него они не дойдут.

PS. Считаем, что класс "директор" - это Main класс, который создает у себя объекты каких-то классов, которые в свою очередь создают объекты и где-то в конце есть объект класса "бригадир" и созданные им объекты класса "рабочий".
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34764754
Фотография Хрюхрюшкин.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pamirВот смотри:
Копает рабочий лопатой яму. И вдруг лопата ломается. Что делать? Рабочий не может копать сломанной лопатой, но и не знает, где эти лопаты брать.
Тогда он идет к своему бригадиру и говорит "лопата сломалась" (передает ошибку наверх). А бригадир уже знает, где берутся лопаты, поэтому берет ее и отдает рабочему (обрабатывает ошибку).
Если ты пишешь класс "рабочий", который не знает, что делать с некоторыми ошибками. Ты должен описать их в throws, чтобы класс "бригадир" знал, какие проблемы могут возникнуть и быть готовым к нему. А вот классу "директор" уже о них знать не нужно - до него они не дойдут.

PS. Считаем, что класс "директор" - это Main класс, который создает у себя объекты каких-то классов, которые в свою очередь создают объекты и где-то в конце есть объект класса "бригадир" и созданные им объекты класса "рабочий".
+1
После чего директор получает информацию о том, что у какого-то рабочего сломалась лопата и сменит поставщика лопат :)
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34764942
Хорошо, спасибо, всё то что вы описали мне ясно.

Задам вопрос иначе -

чем отличается механизм обработки ошибок в Java от аналогичного в других языках, и как они эти другие языки обходятся без этих описаний?

Ни в дельфе, ни в шарпе ничего подобного нет и никакие дополнительные описания экцепшнов не требуются.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34764975
Anarion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что разная идеология языка. Джава считается защищенным языком.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34765026
no13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
новичок_в_Java...
Ни в дельфе, ни в шарпе ничего подобного нет и никакие дополнительные описания экцепшнов не требуются.
И что имеем в результате? Метод бросает исключение, а программа не знает что с ним делать (разработчик не знал об исключении или не захотел его обрабатывать).

В результате исключения вместо того, что бы быть обработанным (рабочий получает новую лопату), летит на самый верх и показывается пользователю как красивое окошко с красной иконкой. Только что пользователю с этим делать, если обработка исключение - дело разработчика?
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34765054
Верно ли я понимаю, что throws это просто описания ПОМОГАЮЩИЕ пользователям методов узнать о том какие checked-экцепшны от этих методов можно ожидать и не более того?

Если таких описаний нет приходится обладать "сверхзнанием" (например из документации) о том какие экцепшны могут порождаться. А здесь это знание уже находится в сигнатурах методов, что несколько упрощает взаимодействие с кодом.

Никакие иные функции на это описание не накладываются.

Поправьте меня пожалуйста если я чего-то недопонимаю.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34765064
что имеем в результате? Метод бросает исключение, а программа не знает что с ним делать

Нас и здесь ничто не заставляет его обрабатывать. Обрабатывать или нет это на совести разработчика.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34765073
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
новичок_в_Java
Нас и здесь ничто не заставляет его обрабатывать. Обрабатывать или нет
это на совести разработчика.


Заставляет. Либо тоже описать trows, либо try/catch.
Иначе компилятор пошлёт далеко.

--
Алексей
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34765255
Таким образом, если я правильно понял, throws это некий механизм самодокументирования кода возведённый до уровня обязательного синтаксического требования.

Никакой иной функциональности он не несёт и никаких обязательств на разработчика (кроме синтаксических) не накладывает.

Обладая этой информацией о вызываемых методах программист сам решает надо ли их обрабатывать (try-блок) или отправлять выше по call-стеку (писать throws).

Не вижу в этом ничего связанного с "защищённостью" языка или "идеологией ООП". Как ничто не мешает необработанному экцепшну спокойно долететь до вершины стека вызовов и предстать в виде "красивого окошка с красной иконкой".

Всё так?
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34765272
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
новичок_в_Java
Не вижу в этом ничего связанного с "защищённостью" языка или "идеологией
ООП". Как ничто не мешает необработанному экцепшну спокойно долететь до
вершины стека вызовов и предстать в виде "красивого окошка с красной
иконкой".


На да, только для этого надо предпринять некоторые усилия (прописать
throws у всех).
А в SWING'ах всяких будет ещё сложнее.
В общем- это затрудняет вылет левых окошек.

А с защищённостью связь прямая- это некоторый зачаток "программирования
по контракту" :)

--
Алексей
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34765353
Anarion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все так. И вобще, хорошим стилем считается не плодить кучу try...{} catch{}, а делать на весь класс глобальный
Код: plaintext
1.
2.
3.
4.
5.
 try {
....
}
 catch  (Ecxeption e){
}
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34765371
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
новичок_в_JavaНе вижу в этом ничего связанного с "защищённостью" языка или "идеологией ООП". Как ничто не мешает необработанному экцепшну спокойно долететь до вершины стека вызовов и предстать в виде "красивого окошка с красной иконкой".

В .Net все именно так и работает.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34765483
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnarionВсе так. И вобще, хорошим стилем считается не плодить кучу try...{} catch{}, а делать на весь класс глобальный
Код: plaintext
1.
2.
3.
4.
5.
 try {
....
}
 catch  (Ecxeption e){
}

"Повбывав бы!"(с)
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34765499
Lennier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnarionВсе так. И вобще, хорошим стилем считается не плодить кучу try...{} catch{}, а делать на весь класс глобальный
Код: plaintext
1.
2.
3.
4.
5.
 try {
....
}
 catch  (Ecxeption e){
}

omg
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34765520
Фотография Хрюхрюшкин.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnarionВсе так. И вобще, хорошим стилем считается не плодить кучу try...{} catch{}, а делать на весь класс глобальный
Код: plaintext
1.
2.
3.
4.
5.
 try {
....
}
 catch  (Ecxeption e){
}

Ужоснах
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34765554
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnarionВ
Код: plaintext
1.
2.
3.
4.
5.
 try {
....
}
 catch  (Ecxeption e){
}


Иногда именно так делать и нужно иногда нет. Все зависит от ситуации. В любом случае, такое категоричное и однозначное заявление - не верно.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34765621
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnarionВсе так. И вобще, хорошим стилем считается не плодить кучу try...{} catch{}, а делать на весь класс глобальный
Код: plaintext
1.
2.
3.
4.
5.
 try {
....
}
 catch  (Ecxeption e){
}

А дальше что? Чем это лучше вообще не обработанных исключений?
Как тут уже показали, исключения позволяют передать обработку на тот уровень стека вызовов, на котором ее можно наиболее корректно обработать. И далеко не всегда это должен быть верхний уровень. Например, вам нужно обработать дать возможность пользователю обработать десяток-другой независимых друг от друга XML-файлов. И что, когда во втором файле будет не валидный XML, оставшиеся не обрабатывать? А именно это и произойдет, если мы исключение на верхнем уровне перехватим.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34765758
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessen AnarionВ
Код: plaintext
1.
2.
3.
4.
5.
 try {
....
}
 catch  (Ecxeption e){
}


Иногда именно так делать и нужно иногда нет. Все зависит от ситуации. В любом случае, такое категоричное и однозначное заявление - не верно.
Так не нужно делать никогда . Как минимум исключения надо логгировать, а по-нормальному - обрабатывать их, причем в зависимости от типа.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34765840
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зашедший wessen AnarionВ
Код: plaintext
1.
2.
3.
4.
5.
 try {
....
}
 catch  (Ecxeption e){
}


Иногда именно так делать и нужно иногда нет. Все зависит от ситуации. В любом случае, такое категоричное и однозначное заявление - не верно.
Так не нужно делать никогда . Как минимум исключения надо логгировать, а по-нормальному - обрабатывать их, причем в зависимости от типа.

я думаю автор сего топика имел ввиду делать всегда один try/catch на весь метод, обработка тут непричем.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34765872
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зашедший AnarionВсе так. И вобще, хорошим стилем считается не плодить кучу try...{} catch{}, а делать на весь класс глобальный
Код: plaintext
1.
2.
3.
4.
5.
 try {
....
}
 catch  (Ecxeption e){
}

"Повбывав бы!"(с)
плюсмильйон.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34766070
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessen Зашедший wessen AnarionВ
Код: plaintext
1.
2.
3.
4.
5.
 try {
....
}
 catch  (Ecxeption e){
}


Иногда именно так делать и нужно иногда нет. Все зависит от ситуации. В любом случае, такое категоричное и однозначное заявление - не верно.
Так не нужно делать никогда . Как минимум исключения надо логгировать, а по-нормальному - обрабатывать их, причем в зависимости от типа.

я думаю автор сего топика имел ввиду делать всегда один try/catch на весь метод, обработка тут непричем.
Во-первых, слова "метод" я там не заметил, только слово "класс". Во-вторых обрабатывать все ошибки используя единственную и пустую секцию catch (Exception) - за такое в продакшн-коде надо сразу увольнять. Хуже только вариант с catch(Throwable) - как пример абсолютной и неизлечимой клиники.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34766145
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
новичок_в_JavaТаким образом, если я правильно понял, throws это некий механизм самодокументирования кода возведённый до уровня обязательного синтаксического требования.

Никакой иной функциональности он не несёт и никаких обязательств на разработчика (кроме синтаксических) не накладывает.

Обладая этой информацией о вызываемых методах программист сам решает надо ли их обрабатывать (try-блок) или отправлять выше по call-стеку (писать throws).

Не вижу в этом ничего связанного с "защищённостью" языка или "идеологией ООП". Как ничто не мешает необработанному экцепшну спокойно долететь до вершины стека вызовов и предстать в виде "красивого окошка с красной иконкой".



Ну... здесь можно рассмотреть две крайности.

Крайность №1 Все методы объявляюься как throws Exception

Любая ситуация (потеря сетевого коннекта) вызывает откат стека до самой вершины с выбросом в консоль трассы методов. Например: IOException в сервлете "валит" WEB-сервер.

Крайность №2 Все методы содержат захват и подавление любых видов исключений.

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

Короче, необходимо искать золотую середину и определится с протоколом исключений. Сам-же протокол - это предмет многочисленных договорённостей (или контрактов) между группами разработчиков. И его следует выносить на обсуждение. Это нормальная практика для разработки различных tier в бизнес-логике.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34766184
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИ что имеем в результате? Метод бросает исключение, а программа не знает что с ним делать (разработчик не знал об исключении или не захотел его обрабатывать).

я думаю что стоит обратить внимание на ситуацию когда ваш метод бросает исключение а не чужой. Пример:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 void  someMethod()  throws  PasswordInvalidException
{
  if (!checkPassword(...)
  {
    throw   new  PasswordInvalidException();
  }
}

в этом примере работа с исключениями это часть логики. Понятно что кроме PasswordInvalidException могут быть другие исключения, с сервером соединения нет или что ещё. И тот кто будет использовать ваш метод напишет что-то вроде

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 try 
{
 someMethod();
}
 catch (PasswordInvalidException passwordInvalidException )
{
 System.err.println("Wrong password");
}
 catch (Throwable t)
{
 System.err.println("Shit happens");
}

Таким образом вы явно предупреждаете тех кто будет использовать ваш код о том какие могут быть ошибки и предлагаете это учесть. Хотя другие могут наплевать на ваши предупреждения и просто ловить Throwable. Я, кстати, так и делаю обычно.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34766204
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1024Хотя другие могут наплевать на ваши предупреждения и просто ловить Throwable. Я, кстати, так и делаю обычно.
Круто! А теперь предлагаю на пару секунд задуматься, что будет в случае возникновения, к примеру, OutOfMemory. И как оно обрабатывает Error, а также чем Error отличается от Exception.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34766211
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пусть лошадь думает. Я ж сказал, указывается разработчиком что может быть его собственное исключение. Кто-то может его использовать и обрабатывать, кто-то может забить. Это скорей элемент логики а не гарантия успешной отработки метода.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34766213
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1024пусть лошадь думает. Я ж сказал, указывается разработчиком что может быть его собственное исключение. Кто-то может его использовать и обрабатывать, кто-то может забить. Это скорей элемент логики а не гарантия успешной отработки метода.
Error, в отличие от Exception, элементом бизнес-логики не является, и забивать на него строго не рекомендуется.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34766226
чего-чего?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Зашедший 1024пусть лошадь думает. Я ж сказал, указывается разработчиком что может быть его собственное исключение. Кто-то может его использовать и обрабатывать, кто-то может забить. Это скорей элемент логики а не гарантия успешной отработки метода.
Error, в отличие от Exception, элементом бизнес-логики не является, и забивать на него строго не рекомендуется.
не рекомендуется забивать на Error?
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34766229
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и?
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34766230
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот цытато из 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.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34766231
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и что?
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34766234
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чего-чего? Зашедший 1024пусть лошадь думает. Я ж сказал, указывается разработчиком что может быть его собственное исключение. Кто-то может его использовать и обрабатывать, кто-то может забить. Это скорей элемент логики а не гарантия успешной отработки метода.
Error, в отличие от Exception, элементом бизнес-логики не является, и забивать на него строго не рекомендуется.
не рекомендуется забивать на Error?
В смысле тупо глушить его нельзя. "Забивать" ака "перехватывать и писать в лог".
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34766235
и сравни с тем что ты сказал.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34766237
Зашедший
В смысле тупо глушить его нельзя. "Забивать" ака "перехватывать и писать в лог".
зачем вообще перехватывать Error?
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34766238
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а теперь ответь на вопрос Зашедший
В смысле тупо глушить его нельзя. "Забивать" ака "перехватывать и писать в лог".
зачем вообще перехватывать Error?
Именно что незачем. Я как раз и написал, что код типа catch(Throwable) - это, мягко говоря, неверно. Перехватывать можно (и часто нужно) Exception, но никак не Error, а в случае с Throwable они тоже будут перехвачены.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34766242
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну добавь в

cath(Error e)
{
throw e;
}

сути это не меняет. Исключения это не гарантия что вс отработает а элемент логики. Можно объявить и те кто будет использовать смогут поймать и обработать. Если захотят.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34766251
1024
сути это не меняет.
что полезного в этой конструкции?
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34766260
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
етитская сила! 1024
сути это не меняет.
что полезного в этой конструкции?
"Пацаны на раёне говорят, что так круче"(с)
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34766266
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полезного нет. Но раз в хелпе написано что Еррор нежелательно обрабатывать то можно передать его наверх.

Вопрос был: зачем вообще этот throws в объявлении метода?

я написал зачем. Какие-то тонкости или несоответствия - да, есть. Где их нет.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34766280
Зашедший етитская сила! 1024
сути это не меняет.
что полезного в этой конструкции?
"Пацаны на раёне говорят, что так круче"(с)
на раёне по.уй как то ;)
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34766304
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1024полезного нет. Но раз в хелпе написано что Еррор нежелательно обрабатывать то можно передать его наверх.

Вопрос был: зачем вообще этот throws в объявлении метода?

я написал зачем. Какие-то тонкости или несоответствия - да, есть. Где их нет.
Я заинтересовался целью объявления catch(Throwable) вместо catch(Exception), так как ч0ткие методы могут только Exception бросать. Или есть необходимость обрабатывать StackOverflow & OutOfMemory?
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34766309
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
catch(OutOfMemoryError ooe)
{
System.err.println("дать писты разработчикам, опять ликов наоставляли");
throw ooe;
}
catch(LinkageError le)
{
System.err.println("удод, настрой пути к либам");
throw le;
}

как пример.

Но это офтоп.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34766552
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по моему писать

Код: plaintext
1.
2.
 public   void  someMethod()  throws  Exception {
    ...      
}
смысла никакого нет, о чем говорит эта сигнатура. В моем могут произойти любые ошибки, ждите чего угодно. И как это что угодно обработать? Только на уровне контейнера, или какого нибудь диспетчер сервлета сказать: "Ну чувак извени фигня вышла".

Код: plaintext
1.
2.
3.
4.
5.
 public   void  someMethod() {
         try  {

        }  catch (Exception e) {
        }
}
Ну и писать один catch тоже очень опасно, может прилететь исключение, которое и обработать вы толком не сможете, так как вы его не ожидали
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34767460
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1024
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 void  someMethod()  throws  PasswordInvalidException
{
  if (!checkPassword(...)
  {
    throw   new  PasswordInvalidException();
  }
}

А могут ли быть исключения частью логики? Как мне кажется, в вашем примере лучше отдельно оговорить, что пароль является правильным. И выбрасывать непроверяемое исключение.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34767537
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну, зачем же они тогда нужны если их не кидать, не ловить и не обрабатывать?
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34767538
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зашедший
Во-первых, слова "метод" я там не заметил, только слово "класс".

Можно пример класса в котором несколько методов и один на весь класс блок try/catch?
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34767607
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВо-вторых обрабатывать все ошибки используя единственную и пустую секцию catch (Exception) - за такое в продакшн-коде надо сразу увольнять. Хуже только вариант с catch(Throwable) - как пример абсолютной и неизлечимой клиники.

мне кажется нада менее категорично заявлять что можно а что нельзя. Мир широк. Пример:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Color c=Color.black
 try {
c=parseColor(stringValueOfColor);
}{ catch (Throwable t){
//ну, не так цвет определили, конфиг может не там лежит, хрен с ним, пусть тогда будет чёрный
//ну, в консоль на всякий что-нить ругнём
t.printStackTrace();
//а, не, лучше пусть зелёный
c=Color.green
}
 return  c;
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34767673
Фотография Хрюхрюшкин.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1024
мне кажется нада менее категорично заявлять что можно а что нельзя. Мир широк. Пример:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Color c=Color.black
 try {
c=parseColor(stringValueOfColor);
}{ catch (Throwable t){
//ну, не так цвет определили, конфиг может не там лежит, хрен с ним, пусть тогда будет чёрный
//ну, в консоль на всякий что-нить ругнём
t.printStackTrace();
//а, не, лучше пусть зелёный
c=Color.green
}
 return  c;

Ваш код — говно.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34767697
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо, но я считаю его шедевром. Чиста моё мнение.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34767706
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1024мне кажется нада менее категорично заявлять что можно а что нельзя. Мир широк. Пример: мне кажется плохой пример, тут может прилететь error "кирдык всему приложению", а тебя тут цвет консолки беспокоит.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34767710
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vas0

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
public void someMethod() {
   try {
   } catch(Exception e) {
   }
}
Ну и писать один catch тоже очень опасно, может прилететь исключение,
которое и обработать вы толком не сможете, так как вы его не ожидали



Ну бывает.
"Давайте мы попробуем получить параметр от ..., а если не получим- то
будем считать его равным ...".
Естественно, что вывести log.error(...) стоит :)

Хотя да, пахнет это не очень :)

--
Алексей
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34767746
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да ладно, обычно прокатывает. Если б было больше времени, если б было больше ресурсов и т.д. и т.п.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34767777
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessen Зашедший
Во-первых, слова "метод" я там не заметил, только слово "класс".

Можно пример класса в котором несколько методов и один на весь класс блок try/catch?

Лехко

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
 public   class  Main {
  
     private   void  sayHello(String hello) {
         if  (hello !=  null ) {
            System.out.println(hello);
        }  else  {
             throw   new  RuntimeException("Hello!");
        }
    }

     private  String getHello() {
         return   null ;
    }
    
     public   static   void  main(String[] args) {
         try  {
            Main main =  new  Main();
            String hello = main.getHello();
            main.sayHello(hello);
        }  catch (Exception e) {
            e.printStackTrace();
        }
    }
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34767800
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мош Блоха почитаем. боян порван имхо
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34767802
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хрюхрюшкин.Ваш код — говно.

Нормальный код. Я - бы написал вместо печати стека
Код: plaintext
1.
logger.log("Цвет сброшен по умолчанию",Logging.WARNING);
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34767833
Фотография Хрюхрюшкин.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНормальный код. Я - бы написал вместо печати стека
Код: plaintext
1.
logger.log("Цвет сброшен по умолчанию",Logging.WARNING);

Если б был отформатирован — было б нормально. С тем, что лучше писать в лог, ага.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34768076
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1024ну, зачем же они тогда нужны если их не кидать, не ловить и не обрабатывать?
ПМСМ, исключения нужно бросать только в крайнем случае. Т.е. не закладывать на них логику. Можно, конечно, делать так, но зачем?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 try 
 while  (true)  do 
{
  sysout(arr[i++])
}
 finally  {}
end;
Насчет вашего примера - все-таки лучше не оставлять пользователя один на один со стеком Java. Не все его понимают :) Перехватить и вывести толковое сообщение все же лучше, чем стек. Опять-таки, уведомив пользователя по причине ошибке можно проще помочь ему ее исправить. Тот же цвет - одно дело, если нет файла, другое дело, если не правильно задан формат файла. Пусть пользователь знает в чем дело. Ситуацию могут спасти хорошие исключение, которые будут хранить в себе информацию о причине ошибки. Тогда да, возможно так имеет смысл делать. При этом выводить пользователю информацию, а не стек.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34768264
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну так там же код приведён, причём тут пользователь. Например получить что-то из базы данных - как минимум

может отсутствовать ждбц драйвер,
может быть недоступен сервер,
может отсутствовать доступ к этим данным.

вроде удобно в методе бросать три разных исключения. Тот код что будет функцию получения данных вызывать может обработать исключения по разному. Например сообщения разные показать или на разные адреса супорта письма послать. А может и не делить их по смыслу а тупо написать "Обратитесь к админу".

По-моему удобно и гибко. Это не крайняя ситуация, это обычная конструкция типа if/else. Хотя можно и не использовать, беды не будет.
...
Рейтинг: 0 / 0
зачем вообще этот throws в объявлении метода?
    #34768483
Anarion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnarionВсе так. И вобще, хорошим стилем считается не плодить кучу try...{} catch{}, а делать на весь класс глобальный
Код: plaintext
1.
2.
3.
4.
5.
 try {
....
}
 catch  (Ecxeption e){
}


Ээээ... Народ... Это йумор, подъебка.
Конечно, так делать не надо.
...
Рейтинг: 0 / 0
62 сообщений из 62, показаны все 3 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / зачем вообще этот throws в объявлении метода?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]