Java фундаментальный - небольшая путаница с типом возврата и оператором возврата в методах - PullRequest
3 голосов
/ 27 ноября 2011

Насколько я понимаю, в Java, если метод объявляет тип возвращаемого значения, компиляция завершается неудачно, если мы не помещаем в метод оператор возврата.Но следующий код успешно компилируется.

 public int test() throws Exception{
        throw new Exception("exception");
    }

Теперь я немного запутался.Я думаю, что мое понимание неверно.Может кто-нибудь уточнить, пожалуйста?Спасибо.

1 Ответ

10 голосов
/ 27 ноября 2011

Метод Java должен либо вернуть, либо выдать исключение.Компилятор отказывается от компиляции, если все возможные пути кода не приводят ни к возврату, ни к исключению.Путь к уникальному коду в этом методе вызывает исключение, поэтому оно допустимо.

Недопустимым было бы следующее: если i <= 0, ничего не возвращается и исключение не выдается:

public int test() throws Exception {
    int i = new Random().nextInt();
    if (i > 0) { 
        throw new Exception("exception");
    }
}

Это будет допустимо, если изменить на

public int test() throws Exception {
    int i = new Random().nextInt();
    if (i > 0) { 
        throw new Exception("exception");
    }
    else {
        return 0;
    }
}
...