Сегодня был на собеседовании по Java и завалился на операторе if.
Задача была в том, чтобы написать метод, который возвращает второе по величине число из входного массива. Завалился на операторе if при проверке данных. Моя реализация была такой:
public int getSecondMaxNumber(int[] numbers) {
if (numbers == null || numbers.length < 2) {
throw new IllegalArgumentException();
}
// далее логика получения второго макс. числа
}
К моему великому удивлению, оказалось, что я допустил грубейшую ошибку. Логику программы следует заключать в блок else, то есть так:
public int getSecondMaxNumber(int[] numbers) {
if (numbers == null || numbers.length < 2) {
throw new IllegalArgumentException();
}
else {
// именно здесь логика получения второго макс. числа
}
}
Зачем весь остальной код писать в блоке else, если при генерировании исключения поток выполнения этого метода прервется?
Аналогично, как выяснилось, и в случае, когда вместо генерации исключения просто указывается return. И вообще, после оператора if всегда должен быть else.
Насколько я понял из слов технического менеджера, в случае с else JVM выполняет некую оптимизацию. Хотелось бы более подробнее узнать об этом моменте - что за оптимизация и где можно подробнее об этом почитать?
ifвот так: numbers == null || numbers.length < 2 и не делаете перебор массива для поиска второго по величине массива? – Jul 18 '16 at 21:07