Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Eugen167
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 115
1

Не понятно как работает два return в одном методе

18.02.2017, 17:48. Просмотров 850. Ответов 9
Метки нет (Все метки)

Имеется вот такой код. Он работает. Но мне не понятно как, т.к. дальнейшие действия зависят от того, что вернет мне этот метод.
В данном случае мне нужно, что бы по результату выполнения метода возвращалась единица, однако в конце метода есть returm null.
Короче грубо говоря идут два return:
return 1;
return null;

В итоге метод не должен вернуть null?
Или этот null возвращается только в случае, если раньше него метод ничего не вернул?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Integer input(String _login, String _password, Context _context)
    {
        login = _login;
        password = _password;
        this.context = _context;
        Input_profile dconn = new Input_profile();
        dconn.execute();
        try {
//здесь возвращается единица
            return dconn.get();
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }
        return null;
    }
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2017, 17:48
Ответы с готовыми решениями:

Как объединить в одном методе несколько событий
Добрый день! Подскажите, пожалуйста, как объединить в одном методе несколько...

Не понятно что делает __success(return >= 0)
Увидел определение HRESULT typedef __success(return >= 0) long HRESULT; не...

Как сделать разные типы возвращаемых значений в одном методе
как сделать разные типы возвращаемых значений в одном методе? public static...

Как можно сделать чтобы принимаемые значения в одном методе могли передаваться в другой метод?
в метод operator_Click передаю значения нажатой кнопки, но мне надо чтобы это...

Какой код предпочтительнее в методе MainWinProc (break или return 0)
Не понятно почему в коде используют то break толи return 0; Скажите что лучше...

9
Lumber
296 / 101 / 41
Регистрация: 02.12.2015
Сообщений: 245
18.02.2017, 20:12 2
если dconn.get(); выбросит исключение InterruptedException или ExecutionException то метод вернёт null.
0
Eugen167
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 115
18.02.2017, 20:59  [ТС] 3
Такого не может быть, ибо return null находится за пределами try...catch...
0
Kir-malishev
71 / 71 / 57
Регистрация: 07.08.2016
Сообщений: 173
18.02.2017, 21:31 4
Если здесь return dconn.get(); произойдёт ошибка, мы выйдем из try...catch... и функция вернёт null. Если исключения не будет, функция вернёт return dconn.get(); и завершит своё выполнение на этом.
Если return null; убрать, программа не скомпилируется, так как будет вероятность, что функция вообще ничего не вернёт.
0
Lynatik001
38 / 32 / 13
Регистрация: 28.09.2012
Сообщений: 631
18.02.2017, 23:23 5
послушай людей, они тебе по идее правду говорят. try catch ето как if else если аналогию провести
сам подумай вот система выполняет код в блоке try, если случилось исключение то оно сразу прекращает выполение блока try, при етом выполняя блок catch и дальше идет выполяет код.
0
Vladimir93
64 / 66 / 11
Регистрация: 28.06.2015
Сообщений: 265
19.02.2017, 11:20 6
Цитата Сообщение от Eugen167 Посмотреть сообщение
Такого не может быть, ибо return null находится за пределами try...catch...
Находиться. Вам уже объяснили.
Если ошибки не будет, вернут вот это return dconn.get(); Метод дальше выполняться не будет.
Если ошибка будет, выполнение прекратиться и код return dconn.get(); не будет выполнен. Тогда ваш метод ничего не вернет, а такого быть не может. Поэтому в случае ошибки возвращают null. Это return null для метода, а не для блока. И он будет выполняться всегда, если до этого не выполниться вот это код return dconn.get();
Так как то.
0
Eugen167
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 115
19.02.2017, 22:28  [ТС] 7
Цитата Сообщение от Lynatik001 Посмотреть сообщение
послушай людей, они тебе по идее правду говорят. try catch ето как if else если аналогию провести
это понятно, просто меня сбил это момент
Цитата Сообщение от Eugen167 Посмотреть сообщение
try {
//здесь возвращается единица
* * * * * * return dconn.get();
* * * * } catch (InterruptedException | ExecutionException e) {
* * * * * * e.printStackTrace();
* * * * }
* * * * return null;
вроде return null не входит в try... catch... и получается, что должен выполнится первый return, а потом второй. Но по факту срабатывает только первый return
0
ExFau$t
638 / 538 / 122
Регистрация: 08.05.2012
Сообщений: 2,706
19.02.2017, 22:41 8
Чего ты не понимаешь, русским языком сказали тебе, по return происходит выход из метода, всё точка, конец. Никаких должен.
0
Lumber
296 / 101 / 41
Регистрация: 02.12.2015
Сообщений: 245
19.02.2017, 22:46 9
Лучший ответ Сообщение было отмечено Eugen167 как решение

Решение

Цитата Сообщение от Eugen167 Посмотреть сообщение
и получается, что должен выполнится первый return, а потом второй
После первого return'а ничего выполняться не должно т.к. return означает прекращение выполнения метода.

Исключение составляет блок finally (если бы он был). finally выполняется и после return'а (в том числе) и в нём даже можно прописать второй return тогда он тоже выполнится, а возвращаемое значение от первого return'а пропадёт.
1
Eugen167
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 115
19.02.2017, 23:01  [ТС] 10
Lumber, я примерно так и предполагал. Спасибо)
0
19.02.2017, 23:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2017, 23:01

Как вернуть два значения через return?
Вот пример. Мне нужно с помощью функции zero записать в х0=0 , а в х1=1. ...

Метод работает как то не понятно
template <typename TBase> bool TArray <TBase>:: ...

Не понятно,как работает программа
Объясните пожалуйста,как работает программа(желательно пошагово и для каждой...


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

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

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