0 / 0 / 0
Регистрация: 28.03.2015
Сообщений: 28
1

Не ловит Exception а NumberFormatException ловит

02.08.2015, 12:14. Показов 2219. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Метод проверяющий строку на только цифры(работает):
Java
1
2
3
4
5
6
7
8
public boolean isNumber(String s) throws NumberFormatException {
        try {
            Double.parseDouble(s);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }
НЕ работает:
Java
1
2
3
4
5
6
7
8
public boolean isNumber(String s) throws Exception {
        try {
            Double.parseDouble(s);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
При попытке вызова метода:
Java
1
Error:(31, 21) java: unreported exception java.lang.Exception; must be caught or declared to be thrown
Почему unhandled? Кидаем Exception ловим Exception...

Спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.08.2015, 12:14
Ответы с готовыми решениями:

Не ловит exception
Почему не ловится range error? #include <iostream> #include <stdexcept> #include <string> ...

Iphone 6 не ловит Wi-Fi в другой комнате, а другой Iphone 5 ловит
Здравствуйте! Помогите, пожалуйста с проблемой. Iphone 6 ловит wi-fi только в комнате с роутером,...

Телефон не ловит 3G
На прошлой неделе взял LG Spirit. Заодно симку билайновскую с 20 ГБ интернета. 3G почему-то не...

Не ловит сообщения
Здравствуйте. Подскажите пожалуйста. У меня есть проект mfc. Если я создаю элемент управления...

4
Автоматизируй это!
Эксперт Python
7107 / 4610 / 1215
Регистрация: 30.03.2015
Сообщений: 13,236
Записей в блоге: 29
02.08.2015, 12:39 2
а зачем одновременно использовать throws и try-catch одной ошибки? Обычно или то или это
0
0 / 0 / 0
Регистрация: 28.03.2015
Сообщений: 28
02.08.2015, 13:31  [ТС] 3
Ну, я так понимаю тут алгоритм такой. Если не можем распарсить строку в цифры, кидаем исключение и возвращаем false. Если можем, просто возвращаем true. Может и тупо, я недавно вообще за комп сел. Так что особо не пинайте.

У меня вопрос в другом. Почему когда кидаем и ловим NumberFormatException все работает. А если кидаем и ловим Exception то
Java
1
Error:(31, 21) java: unreported exception java.lang.Exception; must be caught or declared to be thrown
Может что-то с наследованием ошибки? Почему частный случай ловит, а общий нет?

Спасибо.
0
35 / 35 / 9
Регистрация: 01.08.2015
Сообщений: 111
Записей в блоге: 1
02.08.2015, 13:37 4
Лучший ответ Сообщение было отмечено Oxygene как решение

Решение

При попытке вызова метода:
так это у вас не в этом коде, а там где вы его вызываете.

Если метод выбрасывает любое checked exception (т.е. не наследуемое от RuntimeException), то вы должны его обязательно ловить в try-catch. Но повторюсь это вообще не про этот кусок кода. Вы внимательнее смотрите номер строки который вам показывают.

Вы где-то вызываете свой isNumber() и сигнатура метода показывает что он у вас умеет кидать Exception - исключение которое обязательно надо хэндлить. NumberFormatException был наследником от RuntimeException - его необязательно.

И про исключения почитайте - не велика премудрость.

И да, как вам сказали, у вас код какой-то странный. Внутри метода если вы ловите исключение, то пробрасывать вам уже нечего.
0
0 / 0 / 0
Регистрация: 28.03.2015
Сообщений: 28
02.08.2015, 14:42  [ТС] 5
Цитата Сообщение от RodionGork Посмотреть сообщение
так это у вас не в этом коде, а там где вы его вызываете.
Совершенно верно! Я так и написал, что при вызове метода. Ошибка на той строке где вызов.

Почему если мы бросаем и ловим NumberFormatException то метод вызвать можно? А если Exception то нельзя?

(Что читать еще и читать полностью согласен)

Добавлено через 33 минуты
Цитата Сообщение от RodionGork Посмотреть сообщение
И да, как вам сказали, у вас код какой-то странный. Внутри метода если вы ловите исключение, то пробрасывать вам уже нечего.
Исключение, как таковое, здесь используется как трюк, для того чтобы вернуть в вызывающий метод либо true либо false.
Цитата Сообщение от Oxygene Посмотреть сообщение
Если не можем распарсить строку в цифры, кидаем исключение и возвращаем false. Если можем, просто возвращаем true.
Добавлено через 1 минуту
Цитата Сообщение от RodionGork Посмотреть сообщение
Вы где-то вызываете свой isNumber() и сигнатура метода показывает что он у вас умеет кидать Exception - исключение которое обязательно надо хэндлить. NumberFormatException был наследником от RuntimeException - его необязательно.
Вот теперь спасибо большое! Все понятно стало.
0
02.08.2015, 14:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.08.2015, 14:42
Помогаю со студенческими работами здесь

не ловит Яндекс
Здравствуйте! У меня к вам такой вопрос, есть довольно молодой сайт, но уже пойманный гуглом и...

Процессор ловит КЗ
Всем привет, случай такой когда устанавливал новый кулер видимо повредил проц, но он работал месяца...

Почему то не ловит 3G
Вообщем у меня такая беда,пользуюсь 3G модемом Связной(Мегафон)и у меня не ловит 3G только EDGE...

Плохо ловит вифи
через кабель все хорошо работает, роутер тоже нормально работает, роутер в коридоре возле него...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru