Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/16: Рейтинг темы: голосов - 16, средняя оценка - 4.69
2586 / 2259 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
1

TRICKS: Что вернёт метод?

17.02.2014, 13:39. Показов 3255. Ответов 42

Author24 — интернет-сервис помощи студентам
начинаем серию постов TRICKS по фишкам JVM и компилятора, вопросы для самообразования, не более

просьба не компилировать, а попробовать подумать что вернёт метод

Java
1
2
3
4
5
6
7
8
9
10
    static String dubleReturn() {
        while (true) {
            try {
                return "foo";
            } finally {
                break;
            }
        }
        return "boo";
    }
а после того как скомпилите и увидите результат, прошу объяснить почему именно так

ps: вопрос чисто академический, поэтому не стоит нести чушь про то что так писать негоже
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.02.2014, 13:39
Ответы с готовыми решениями:

TRICKS: Что нам грядущая 8-чка готовит
допустим у нас есть List l = new ArrayList() { { for (int i = 0; i...

Пример, когда метод Thread.isAlive() вернёт false
Приведите, пожалуйста, два примера. Такие, что бы в первом main thread при вызове на ней метода...

Reflection: что вернет getField.getInt(null)?
У Хорстмана наткнулся на следующую строку: return JOptionPane.class.getField(s).getInt(null); И...

Что вернет length для двумерного массива?
я Java не изучаю.но анализируя один код на Java у меня возник вопрос. допустим задан двухмерный...

42
3 / 3 / 1
Регистрация: 18.09.2013
Сообщений: 19
18.02.2014, 18:59 41
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от mutagen Посмотреть сообщение
это ключевая нескладуха, так как ретурн был в трай и этот блок отработал успешно и без экцепов по всем нормам человеческого языка ))) По всем соглашениям и докам после отработки финализации, мы обязаны были вернуть управление на return, так как он уже был выполнен и ожидает возврата из файнала
Здесь как раз объясняется почему это так работает.
http://www.javaworld.com/article/2077609
0
2586 / 2259 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
18.02.2014, 19:16  [ТС] 42
Цитата Сообщение от vladimirsky Посмотреть сообщение
почему это так работает
я знаю почему, я смотрел байткод )
вопрос не почему, а в том что так не должно )
уже устал от этой темы )
0
3 / 3 / 1
Регистрация: 18.09.2013
Сообщений: 19
18.02.2014, 19:53 43
Цитата Сообщение от mutagen Посмотреть сообщение
я знаю почему, я смотрел байткод )
вопрос не почему, а в том что так не должно )
уже устал от этой темы )
Я тоже устал
Если принять ваш вариант, то операторы break, continue...
вообще не должны быть в блоке finally. Поскольку в этом случае один и тот же код в finally будет не одинаково работать в случае если в его вошли с return или без.
Особенно это заметно с continue. Достаточно усложнить код:
(пример чисто гипотетичекий)

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
static String dubleReturn() {
        while (true) {
            try {
               if (somecondition)
                  return "foo";
            } finally {
               if (!objectready)
                 continue;
              freeresources();
            }
        }
        return "boo";
    }
По-этому в случае если break и continue допустимы в finally, то правильным будет реализованный в java вариант.
0
18.02.2014, 19:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.02.2014, 19:53
Помогаю со студенческими работами здесь

Передать в метод "что-то", что бы метод мог в это "что-то" записать матрицу неизвестной размерности
Опишу суть проблемы подробнее. Есть метод, который умножает две матрицы, мне бы хотелось, что бы...

Что вернёт метод простого класса
доброго времени суток. Имеем простой класс. import android.accounts.Account; import...

Что вернет функция
Что вернет функция, проверяющая баланс скобок, если она принимает как параметр такую строку: ...

Что вернет функция
Здравствуйте! Я вот С не знаю вообще, подскажите пожалуйста выполнится ли while при таком условии ...


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

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