Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/47: Рейтинг темы: голосов - 47, средняя оценка - 4.62
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
1

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

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


Всем привет поясните мне в чём разница между этими операторами?
Очень хотелось бы понять что они делают и чем отличаются.
Почитал некоторую литературу но вроде-бы не понял что да как
Ручная передача исключений это -> throw(к стати уточните что это означает )
А вот -> throws что делает и при каких ситуациях употребляется я как-то не совсем вник
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.05.2017, 09:52
Ответы с готовыми решениями:

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

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

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

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

__________________
Помогаю в написании студенческих работ здесь.
Записывайтесь на профессиональные курсы Java-разработчиков
14
Автоматизируй это!
Эксперт Python
4112 / 2811 / 836
Регистрация: 30.03.2015
Сообщений: 9,132
Записей в блоге: 14
06.05.2017, 14:37 2
Лучший ответ Сообщение было отмечено Maxim09 как решение

Решение

throw - бросить исключение самому в стиле
Java
1
2
3
if (result>maxValue){
            throw new IndexOutOfBoundsException();
        }
throws - предупредить что данный метод может бросать такое-то исключение и его надо обработать при вызове метода
Java
1
2
3
public void readFile() throws IOException {
        //работа с файлом
    }
1
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
06.05.2017, 14:59  [ТС] 3
Welemir1,
А кого предупредить? программиста или компилятор, что возможна какая та ошибка определённого типа, так?
0
183 / 110 / 44
Регистрация: 03.07.2016
Сообщений: 491
06.05.2017, 15:03 4
Ну как бы програмиста предупредить, которого предупредит компилятор(если исключение cheked), которого предупредил програмист писавший метод.
1
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
06.05.2017, 15:12  [ТС] 5
Т.е. иными словами метод выдаёт ошибку по "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
1603 / 518 / 97
Регистрация: 18.11.2010
Сообщений: 2,807
Записей в блоге: 2
06.05.2017, 15:14 6
Допустим у вас есть метод
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
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
06.05.2017, 15:17  [ТС] 7
Если вас не затруднит вы бы не могли описать деятельность программы которую выложил я чуть выше.
Комментариями напротив строчки или как нибудь ещё.
0
$ su
1603 / 518 / 97
Регистрация: 18.11.2010
Сообщений: 2,807
Записей в блоге: 2
06.05.2017, 15:22 8
Цитата Сообщение от Maxim09 Посмотреть сообщение
Комментариями напротив строчки или как нибудь ещё.
Если вы прочтете код чуть выше я его прокомментировал, то думаю без труда разберете свой код.
В вашем коде вы пробрасываете исключении выше и обрабатываете его в main.
0
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
06.05.2017, 15:30  [ТС] 9
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 10
Цитата Сообщение от Maxim09 Посмотреть сообщение
Всем привет поясните мне в чём разница между этими операторами?
Очень хотелось бы понять что они делают и чем отличаются.
Оператор throw это выброс исключения, можно сделать это в любом месте программы.
Если программа многоуровневая, throw можно выбросить на любом уровне.
Но допустим Вы не можете обработать это исключение в том месте где выбрасываете его.
Тогда Вы "пробрасываете" исключение наверх за пределы метода, чтобы кто то там наверху его перехватил
и обаботал. Вот этим и занимается throws. Он позволяет Вам не закрывать выброс исключения throw
в блок try_catch в самом методе, а отправить исключение на уровень выше, за пределы метода.
Так можно пробрасывать исключение до самого верха, вплоть до метода main, и если main тоже
использует throws, тогда исключение отработает JVM.
1
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
06.05.2017, 15:48  [ТС] 11
Честно говоря как-то трудно даются мне эти throw и throws...

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

Решение

Да. Предлагаю ввести код в IDE и по шагам посмотреть в симуляторе.
0
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
06.05.2017, 19:30  [ТС] 15
Благодарю всех за ответы.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.05.2017, 19:30

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.