Когда необходимо использовать «throws» в сигнатуре метода? - PullRequest
0 голосов
/ 20 мая 2018

Я не совсем понимаю, когда мне нужно использовать ключевое слово throws.Рассмотрим этот код:

import java.util.InputMismatchException;
import java.util.Scanner;

public class Main {

    public static void otherMethod() throws InputMismatchException {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        System.out.println(num);
    }

    public static void main (String[] args) {
        try {
            otherMethod();
        } catch(InputMismatchException e) {
            System.out.println("Please input an integer");
        }
    }
}

Если вы введете что-либо, что не является целым числом, это приведет к исключению InputMismatchException.Это исключение передается в основной метод.Однако я обнаружил, что часть throws InputMismatchException в otherMethod () вообще не имеет значения, и исключение по-прежнему обрабатывается основным методом без него.Без этой части код выглядел бы так:

import java.util.InputMismatchException;
import java.util.Scanner;

public class Main {

    public static void otherMethod() {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        System.out.println(num);
    }

    public static void main (String[] args) {
        try {
            otherMethod();
        } catch(InputMismatchException e) {
            System.out.println("Please input an integer");
        }
    }
}

Мне интересно, когда и почему используется ключевое слово throws, и что оно на самом деле делает.

Ответы [ 4 ]

0 голосов
/ 20 мая 2018

В Java существует два вида исключений: проверенное исключение и непроверенное исключение.

Проверенные исключения требуют от программиста явного перехвата или объявления throws в сигнатуре метода.Между тем непроверенные исключения не требуют явного перехвата.

Непроверенные исключения - это исключения, которые являются или являются подклассом RuntimeException или Error.Проверенное исключение - это все, что осталось.

Ваш InputMismatchException простирается от NoSuchElementException, а NoSuchElementException простирается от RuntimeException, поэтому вам не нужно объявлять throws или перехватывать его.

0 голосов
/ 20 мая 2018

Вы можете использовать ключевое слово throws, когда вы знаете, что может быть сгенерировано исключение, но вы не хотите обрабатывать его каким-либо образом.

0 голосов
/ 20 мая 2018

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

Проверенные исключения - это те, которые следует ожидать, и с ними можно иметь дело или восстанавливать их.Непроверенные или исключительные ситуации времени выполнения представляют исключительные обстоятельства, от которых вы не ожидали или не сможете оправиться.

Из официальных документов :

"Еслиразумно ожидать, что клиент восстановится из исключения, сделайте его проверенным исключением. Если клиент не может ничего сделать для восстановления из исключения, сделайте его непроверенным исключением. "

Документация по Java поможет вамчерез иерархию классов в Java

java.lang.Object
  java.lang.Throwable
    java.lang.Exception
      java.lang.RuntimeException

Где любое исключение, которое наследует от RuntimeException, является непроверенным исключением, но проверяются исключения, которые наследуются непосредственно от Exception.Есть также Ошибки , которые немного отличаются.

0 голосов
/ 20 мая 2018

InputMismatchException расширяется от NoSuchElementException, который расширяется от RuntimeException, и:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...