Как выяснили ранее, исключения нужно бросать, когда выполнить задачу невозможно.
Выброс RuntimeException
Исключения, являющиеся подтипами RuntimeException, стоит бросать, когда программист, обратившийся к вашему коду, сделал это неправильно. Например, при некорректных входных данных.
Любое непроверяемое исключение легко может быть брошено:
throw new RuntimeException("Что-то пошло не так.");
throw new IllegalArgumentException("Передана свинья, ожидался котик.");
throw new UnsupportedOperationException("¯\\_(ツ)_/¯");
Строка, передаваемая исключению в конструктор, — это сообщение, поясняющее причину ошибки. Оно необязательно, но без него понять причину ошибки сложнее.
Выброс проверяемых исключений (checked exceptions)
Чтобы выбросить проверяемое исключение, нужно объявить о том, что метод в принципе способен бросать исключение такого типа:
public void doSomethingRisky()
throws FileNotFoundException {
throw new FileNotFoundException("какой ещё файл?");
}
Объявление throws обяжет клиента этого метода ловить исключение.
Даже если в методе нигде нет выброса исключения заявленного типа, но есть throws, клиент обязан будет ловить (или пропускать, объявляя throws в своём методе) исключения этого типа.