Это был вопрос интервью:
public class Demo {
    public static void main(String[] args) {
        System.out.println(foo());
    }
    static String foo() {
        try {
            return "try ...";
        } catch (Exception e) {
            return "catch ...";
        } finally {
            return "finally ..."; //got as result
        }
    }
}
Мой вопрос в том, почему нет ошибок времени компиляции. Когда у меня есть оператор return в моем блоке finally, он обязан вернуться из finally вместо try и catch. Я попытался скомпилировать этот код с опцией -Xlint, он дает предупреждение как.
warning: [finally] finally clause cannot complete normally