Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/88: Рейтинг темы: голосов - 88, средняя оценка - 4.58
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458

Операторы throw и throws, в чём разница?

06.05.2017, 09:52. Показов 17665. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет поясните мне в чём разница между этими операторами?
Очень хотелось бы понять что они делают и чем отличаются.
Почитал некоторую литературу но вроде-бы не понял что да как
Ручная передача исключений это -> throw(к стати уточните что это означает )
А вот -> throws что делает и при каких ситуациях употребляется я как-то не совсем вник
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.05.2017, 09:52
Ответы с готовыми решениями:

Для чего используются операторы -> и =>, в чем разница?
Для чего используются операторы -> и =>, в чем разница?

Операторы Exit, Close, Application.Terminate в чем разница между ними?
Хочу понять разницу между этими операторами. Например, оператор Application.Terminate выходит из программы, то же делает и Close. ТОгда...

обработка ошибок , оператор throw , ошибки , ошибка , операторы
всем здрасть! долго я к этому подбирался:)но всё же - как это сделать? package { import flash.display.Sprite; import...

14
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
06.05.2017, 14:37
Лучший ответ Сообщение было отмечено Maxim09 как решение

Решение

throw - бросить исключение самому в стиле
Java
1
2
3
if (result>maxValue){
            throw new IndexOutOfBoundsException();
        }
throws - предупредить что данный метод может бросать такое-то исключение и его надо обработать при вызове метода
Java
1
2
3
public void readFile() throws IOException {
        //работа с файлом
    }
1
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
06.05.2017, 14:59  [ТС]
Welemir1,
А кого предупредить? программиста или компилятор, что возможна какая та ошибка определённого типа, так?
0
 Аватар для Borsche
183 / 110 / 44
Регистрация: 03.07.2016
Сообщений: 496
06.05.2017, 15:03
Ну как бы програмиста предупредить, которого предупредит компилятор(если исключение cheked), которого предупредил програмист писавший метод.
1
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
06.05.2017, 15:12  [ТС]
Т.е. иными словами метод выдаёт ошибку по "throws" а программист уже в свою очередь исправляет да?

Добавлено через 6 минут
К примеру в следующей программе какова очерёдность выполнения, т.е. какая строка после какой идёт? распишите плиз если не сложно!
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class TestThrow 
{
    static void method() throws IllegalAccessException 
    { 
        try { 
            System.out.println("inside method"); 
            throw new IllegalAccessException ("Exception in method"); 
        } catch (NullPointerException e) { 
            System.out.println(e.getMessage()); 
        }
    } 
    public static void main(String args[])
    { 
        try { 
            method(); 
        } catch(IllegalAccessException  e) { 
            System.out.println("Catch inside main : " + e.getMessage()); 
        } 
    }
}
0
$ su
 Аватар для ntlinuxnt
1605 / 520 / 97
Регистрация: 18.11.2010
Сообщений: 2,807
Записей в блоге: 2
06.05.2017, 15:14
Допустим у вас есть метод
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public void divide() throws ArithmeticException {
    // делим
}
 
// ... где-то в другом месте
// если вызвать просто так divide() компилятор ругнется что мы не обрабатываем ArithmeticException или не пробрасываем его выше
public void mymethod(){
    divide() //ругнется
}
 
public void mymethod(){
    try{
        divide() // а так не ругнется
    }catch(ArithmeticException e){
        // обрабатываем
    }
}
 
// или как вариант пробрасываем еще выше
 
public void mymethod() throws ArithmeticException {
    divide() // и так не ругнется
}
2
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
06.05.2017, 15:17  [ТС]
Если вас не затруднит вы бы не могли описать деятельность программы которую выложил я чуть выше.
Комментариями напротив строчки или как нибудь ещё.
0
$ su
 Аватар для ntlinuxnt
1605 / 520 / 97
Регистрация: 18.11.2010
Сообщений: 2,807
Записей в блоге: 2
06.05.2017, 15:22
Цитата Сообщение от Maxim09 Посмотреть сообщение
Комментариями напротив строчки или как нибудь ещё.
Если вы прочтете код чуть выше я его прокомментировал, то думаю без труда разберете свой код.
В вашем коде вы пробрасываете исключении выше и обрабатываете его в main.
0
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
06.05.2017, 15:30  [ТС]
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class TestThrow 
{
    static void method() throws IllegalAccessException 
    { 
        try { 
            System.out.println("inside method"); //от сюда начинается выполнение метода и его первое действие верно?
            throw new IllegalAccessException ("Exception in method"); //тут выбрасывается исключение так?(а вот следующий шаг мне не совсем понятен) толи это исключение ловит catch самого метода, толи тот catch который в main ф-ции, т.е. выполнение  метода останавливается
        } catch (NullPointerException e) { //это или ->
            System.out.println(e.getMessage()); // и тут ещё вопрос, разве это не должно напечататься?
        }
    } 
    public static void main(String args[])
    { 
        try { 
            method(); //тут идёт обращения к методу так?
        } catch(IllegalAccessException  e) { // <- это?
            System.out.println("Catch inside main : " + e.getMessage()); //вместе в этим? непойму :(
        } 
    }
}
0
164 / 170 / 139
Регистрация: 28.11.2016
Сообщений: 301
06.05.2017, 15:40
Цитата Сообщение от Maxim09 Посмотреть сообщение
Всем привет поясните мне в чём разница между этими операторами?
Очень хотелось бы понять что они делают и чем отличаются.
Оператор throw это выброс исключения, можно сделать это в любом месте программы.
Если программа многоуровневая, throw можно выбросить на любом уровне.
Но допустим Вы не можете обработать это исключение в том месте где выбрасываете его.
Тогда Вы "пробрасываете" исключение наверх за пределы метода, чтобы кто то там наверху его перехватил
и обаботал. Вот этим и занимается throws. Он позволяет Вам не закрывать выброс исключения throw
в блок try_catch в самом методе, а отправить исключение на уровень выше, за пределы метода.
Так можно пробрасывать исключение до самого верха, вплоть до метода main, и если main тоже
использует throws, тогда исключение отработает JVM.
1
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
06.05.2017, 15:48  [ТС]
Честно говоря как-то трудно даются мне эти throw и throws...

Добавлено через 4 минуты
Когда выполняется блок catch метода
Java
1
static void method()
вот что хочу знать!
0
164 / 170 / 139
Регистрация: 28.11.2016
Сообщений: 301
06.05.2017, 15:52
Цитата Сообщение от Maxim09 Посмотреть сообщение
Когда выполняется блок catch метода
Никогда, потому что catch ловит NullPointer, а throw выброшено по Illegal... поэтому управление улетает наверх через throws Illegal...
1
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
06.05.2017, 15:55  [ТС]
т.е. catch метода method() не срабатывает никогда так? А срабатывает catch --> main функции верно?
0
164 / 170 / 139
Регистрация: 28.11.2016
Сообщений: 301
06.05.2017, 19:26
Лучший ответ Сообщение было отмечено Maxim09 как решение

Решение

Да. Предлагаю ввести код в IDE и по шагам посмотреть в симуляторе.
0
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
06.05.2017, 19:30  [ТС]
Благодарю всех за ответы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.05.2017, 19:30
Помогаю со студенческими работами здесь

C6281: Неверный порядок операций: операторы отношений имеют более высокий приоритет, чем битовые операторы
Пишу змейку(sfml). Мне понадобилось создать while цикл, в котором я делаю две проверки, проверяю равенство двух позиций, и через оператор...

Функция try-throw-catch, в чем ошибка?
Добрый вечер. Реализую калькулятор на С++, сам калькулятор работал до тех пор, как начал создавать исключения (Для того, чтобы исключить...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru