Java: могут ли методы с обработчиками исключений не иметь операторов возврата?

Могут ли методы с обработчиками исключений не иметь операторов возврата?!?

-Ниже отредактированный код.

    public int pop() throws NullPointerException {

    try{
         if (a.isEmpty()){
             throw new NullPointerException();
         }

         int x = (int)a.remove(a.size() - 1);
        if (x == (int)min.get(min.size() - 1)) {
            min.remove(min.size() - 1);
        }
        return x;

    }catch(NullPointerException n) {
        System.out.println("There are no elements to pop.");
    }
    return -1;
}

Пожалуйста, уточните свой вопрос, точно определив, о каком методе вы спрашиваете.

Hovercraft Full Of Eels 28.02.2019 23:07

Если вы поймаете EmptyStackException, ваш оператор return не будет достигнут. Вам нужно указать, что метод вернет в этой ситуации.

khelwood 28.02.2019 23:15
throw new NullPointerException() Не делайте этого.
GriffeyDog 28.02.2019 23:19

Подумайте о том, что должен возвращать метод в случае возникновения исключения. Тогда верни это.

Dawood ibn Kareem 28.02.2019 23:26

Тай. Я публикую новый фрагмент кода на случай, если кому-то понадобится наглядный пример в будущем. Работает как надо.

Blitze 02.03.2019 05:43
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
5
82
1

Ответы 1

Если оператор throw new <exception> всегда является последним оператором на пути выполнения через тело метода или если тип возвращаемого значения метода — void.

В вашем коде вы могли бы просто не обрабатывать EmptyStackException. Проблема возникает из-за введения catch, в конце которого нет ни return, ни throw утверждения.

public int pop() {
  if (a.isEmpty()){
    throw new NullPointerException();
  }

  int x = (int) a.remove(a.size() - 1);
  if (x == (int) min.get(min.size() - 1)) {
      min.remove(min.size() - 1);
  }
  return x;
}

В блоке throw new <exception> также есть finally :(

lalo 28.02.2019 23:13

Примечание: finally побеждает все (кроме System.exit(...), я знаю, что вы сказали «последний оператор пути выполнения», но finally часто упускают из виду).

Turing85 28.02.2019 23:14

Другие вопросы по теме