Приветствую!
Продолжаю почитывать книгу Шилдта "Java 8. Полное руководство"
Параллельно, само собой, экспериментирую с приведенными примерами. Заинтересовал такой пример использования оператора
throws
Шилдт пишет, что если метод генерирует исключение, которое сам не обрабатывает, то для того, что программа успешно скомпилировалась необходимо обязательно дополнить объявление метода указанием оператора throws и списка исключений, который тот порождает, но оставляет на разбор последующему коду.
Цитата из книги "Ниже приведен пример неверно написанной программы, пытающейся сгенерировать
исключение, которое в самой программе не перехватывается. Эта программа
не подлежит компиляции , поскольку в ней отсутствует оператор
throws
,
в котором объявляется неперехватываемое исключение.
Эта программа с одержит ошибку , и поэтому она не подлежит компиляции
c l a s s Throws Demo {
s t a t i c void t h r owOn e ( ) {
)
S y s t em . out . p r i n t l n ( " B теле ме тода t h r owOne ( ) . " ) ;
throw new I l l eg alAcc e s s Excep t i on ( " дeмoнc тpaция " ) ;
puЫ i c s ta t i c void ma i n ( S t r ing a r gs [ ] ) {
throwOne ( ) ;
Чтобы эту программу можно было скомпилировать, в ее исходный следует
внести два изменения. Во-первых, объявить в методе
throwOne ( )
генерирование исключения типа
IllegalAccessException
. И во-вторых, определить в методе
main( )
блок оператора
try/catch
для перехвата этого исключения. Ниже приведен исправленный код данной программы."
Я покрутил текст программы и обнаружил, что такой вариант тоже собирается и работает:
static void testException()
{
throw new ArithmeticException("Арифметическая ошибка"); // тут порождаем исключение
}
public static void main(String[] args) {
// TODO code application logic here
try{
testException();
}
catch(ArithmeticException e)
{
System.out.println(e + "Vot tut"); // здесь отлавливаем исключение, которое породил наш метод
}
}
Т.е. теперь мне непонятно зачем использовать оператор trows, ведь и без него все работает?