Обязательно ли использовать else?

1,00
р.
Сегодня был на собеседовании по 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 выполняет некую оптимизацию. Хотелось бы более подробнее узнать об этом моменте - что за оптимизация и где можно подробнее об этом почитать?

Ответ
В дополнение к ответу @VladD: я скомпилировал следующий класс с помощью java 8:
public class IfElse { public int getSecondMaxNumber1(int[] numbers) { if (numbers == null || numbers.length < 2) { throw new IllegalArgumentException() } return numbers[1] }
public int getSecondMaxNumber2(int[] numbers) { if (numbers == null || numbers.length < 2) { throw new IllegalArgumentException() } else { return numbers[1] } } }
Видно, что байткод методов абсолютно одинаковый:
$ javap -c IfElse.class Compiled from "IfElse.java" public class IfElse { public IfElse() Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."":()V 4: return
public int getSecondMaxNumber1(int[]) Code: 0: aload_1 1: ifnull 10 4: aload_1 5: arraylength 6: iconst_2 7: if_icmpge 18 10: new #2 // class java/lang/IllegalArgumentException 13: dup 14: invokespecial #3 // Method java/lang/IllegalArgumentException."":()V 17: athrow 18: aload_1 19: iconst_1 20: iaload 21: ireturn
public int getSecondMaxNumber2(int[]) Code: 0: aload_1 1: ifnull 10 4: aload_1 5: arraylength 6: iconst_2 7: if_icmpge 18 10: new #2 // class java/lang/IllegalArgumentException 13: dup 14: invokespecial #3 // Method java/lang/IllegalArgumentException."":()V 17: athrow 18: aload_1 19: iconst_1 20: iaload 21: ireturn }