throws Exception
Декларация представляет собой автоматизированный способ отслеживания методов , которые могли бы бросить исключение для ожидаемых , но неизбежных причин. Объявление обычно специфично для типа или типов исключений, которые могут быть выданы, например throws IOException
или throws IOException, MyException
.
У всех нас есть или мы в конечном итоге напишем код, который неожиданно останавливается и сообщает об исключении из-за чего-то, чего мы не ожидали перед запуском программы, например деления на ноль или индекса за пределами. Поскольку метод не ожидал ошибок, их нельзя было «поймать» и обработать с помощью предложения try catch. Любые ничего не подозревающие пользователи метода также не узнают об этой возможности, и их программы также остановятся.
Когда программист знает, что могут возникать определенные типы ошибок, но хотел бы обрабатывать эти исключения вне метода, метод может «выбросить» один или несколько типов исключений в вызывающий метод вместо их обработки. Если программист не объявил, что метод (может) вызвать исключение (или если у Java не было возможности объявить его), компилятор не мог бы знать, и будущий пользователь метода должен был бы знать об этом, ловить и обрабатывать любые исключения, которые может вызвать метод. Поскольку в программах может быть много уровней методов, написанных множеством разных программ, становится трудно (невозможно) отслеживать, какие методы могут вызывать исключения.
Несмотря на то, что в Java есть возможность объявлять исключения, вы все равно можете написать новый метод с необработанными и необъявленными исключениями, и Java скомпилирует его, и вы сможете запустить его в надежде на лучшее. Что Java не позволяет вам сделать, так это скомпилировать ваш новый метод, если он использует метод, который был объявлен как генерирующее исключение (я), если вы не обрабатываете объявленное исключение (я) в своем методе или не объявляете свой метод как генерирующий то же исключение (я) или если есть несколько исключений, вы можете обработать некоторые и выбросить остальные.
Когда программист объявляет, что метод генерирует исключение определенного типа, это просто автоматический способ предупредить других программистов, использующих метод, о возможности исключения. Затем программист может решить обработать исключение или передать предупреждение, объявив вызывающий метод как вызывающий то же исключение. Поскольку компилятор был предупрежден о том, что в этом новом методе возможно исключение, он может автоматически проверять, обрабатывают ли будущие вызывающие новый метод исключение или объявляют его и заставляют произойти одно или другое.
Хорошая особенность этого типа решения заключается в том, что когда компилятор сообщает, Error: Unhandled exception type java.io.IOException
он предоставляет файл и номер строки метода, который был объявлен для создания исключения. Затем вы можете просто отказаться от ответственности и объявить, что ваш метод также «генерирует исключение IOException». Это может быть выполнено вплоть до основного метода, где это приведет к остановке программы и сообщению об исключении пользователю. Однако лучше перехватить исключение и обработать его удобным способом, например, объяснить пользователю, что произошло и как это исправить. Когда метод перехватывает и обрабатывает исключение, ему больше не нужно объявлять исключение. На этом доллар останавливается, так сказать.