Чтение онлайн

на главную - закладки

Жанры

Программирование на Java

Вязовик Н.А.

Шрифт:

public class LegalOne extends BaseClass {

public void method throws IOException {

...

}

}

public class LegalTwo extends BaseClass {

public void method {

...

}

}

public class LegalThree extends BaseClass {

public void method

throws

EOFException,MalformedURLException {

...

}

}

public class IllegalOne extends BaseClass {

public void method

throws

IOException,IllegalAccessException {

...

}

}

public class IllegalTwo extends BaseClass {

public void method {

...

throw

new Exception;

}

}

В данном случае:

* определение класса LegalOne будет корректным, так как переопределение метода method верное (список ошибок не изменился);

* определение класса LegalTwo будет корректным, так как переопределение метода method верное (новый метод не может выбрасывать ошибок, а значит, не расширяет список возможных ошибок старого метода);

* определение класса LegalThree будет корректным, так как переопределение метода method будет верным (новый метод может создавать исключения, которые являются подклассами исключения, возбуждаемого в старом методе, то есть список сузился);

* определение класса IllegalOne будет некорректным, так как переопределение метода method неверно ( IllegalAccessException не является подклассом IOException, список расширился);

* определение класса IlegalTwo будет некорректным: хотя заголовок method объявлен верно (список не расширился), в теле метода бросается исключение, не указанное в throws.

Особые случаи

Во время исполнения кода могут возникать ситуации, которые почти не описаны в литературе.

Рассмотрим такую ситуацию:

import java.io.*;

public class Test {

public Test {

}

public static void main(String[] args) {

Test test = new Test;

try {

test.doFileInput("bogus.file");

}

catch (IOException ex) {

System.out.println("Second exception handle stack trace");

ex.printStackTrace;

}

}

private String doFileInput(String fileName)

throws FileNotFoundException,IOException {

String retStr = "";

java.io.FileInputStream fis = null;

try {

fis = new java.io.FileInputStream(fileName);

}

catch (FileNotFoundException ex) {

System.out.println("First exception handle stack trace");

ex.printStackTrace;

throw ex;

}

return retStr;

}

}

Результат работы будет выглядеть следующим образом:

java.io.FileNotFoundException: bogus.file (The system cannot find the file specified) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:64) at experiment.Test.doFileInput(Test.java:33) at experiment.Test.main(Test.java:21) First exception handle stack trace java.io.FileNotFoundException: bogus.file (The system cannot find the file specified) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:64) at experiment.Test.doFileInput(Test.java:33) at experiment.Test.main(Test.java:21) Second exception handle stack trace

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

Рассмотрим другой пример:

import java.io.*;

public class Test {

public Test {

}

public static void main(String[] args) {

Test test = new Test;

try {

test.doFileInput;

}

catch (IOException ex) {

System.out.println("Exception hash code " + ex.hashCode);

ex.printStackTrace;

}

}

private String doFileInput

throws FileNotFoundException,IOException {

String retStr = "";

java.io.FileInputStream fis = null; try {

fis = new java.io.FileInputStream("bogus.file");

}

catch (FileNotFoundException ex) {

System.out.println("Exception hash code " + ex.hashCode);

ex.printStackTrace;

fis = new java.io.FileInputStream("anotherBogus.file");

throw ex;

}

return retStr;

}

}

java.io.FileNotFoundException: bogus.file (The system cannot find

the file specified)

at java.io.FileInputStream.open(Native Method)

at java.io.FileInputStream.<init>(FileInputStream.java:64)

at experiment.Test.doFileInput(Test.java:33)

at experiment.Test.main(Test.java:21)

Exception hash code 3214658

java.io.FileNotFoundException: anotherBogus.file (The system cannot find

the path specified)

at java.io.FileInputStream.open(Native Method)

at java.io.FileInputStream.<init>(FileInputStream.java:64)

at experiment.Test.doFileInput(Test.java:38)

at experiment.Test.main(Test.java:21)

Exception hash code 6129586

Несложно заметить, что, хотя последовательность вызовов одна и та же, в вызываемом и вызывающем методах обрабатываются разные объекты исключений.

Поделиться:
Популярные книги

Газлайтер. Том 31

Володин Григорий Григорьевич
31. История Телепата
Фантастика:
боевая фантастика
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Газлайтер. Том 31

Моров. Том 4

Кощеев Владимир
3. Моров
Фантастика:
фэнтези
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Моров. Том 4

Отряд

Валериев Игорь
5. Ермак
Фантастика:
альтернативная история
5.25
рейтинг книги
Отряд

Матабар IV

Клеванский Кирилл Сергеевич
4. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар IV

На гребне обстоятельств

Шелег Дмитрий Витальевич
7. Живой лед
Фантастика:
фэнтези
5.25
рейтинг книги
На гребне обстоятельств

Второй кощей

Билик Дмитрий Александрович
8. Бедовый
Фантастика:
юмористическое фэнтези
городское фэнтези
мистика
5.00
рейтинг книги
Второй кощей

Матабар III

Клеванский Кирилл Сергеевич
3. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар III

Изгой Проклятого Клана. Том 6

Пламенев Владимир
6. Изгой
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Изгой Проклятого Клана. Том 6

Камень. Книга восьмая

Минин Станислав
8. Камень
Фантастика:
фэнтези
боевая фантастика
7.00
рейтинг книги
Камень. Книга восьмая

Наташа, не реви! Мы всё починим

Рам Янка
7. Самбисты
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Наташа, не реви! Мы всё починим

Последний Паладин. Том 3

Саваровский Роман
3. Путь Паладина
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 3

День Астарты

Розов Александр Александрович
6. Конфедерация Меганезия
Фантастика:
социально-философская фантастика
5.00
рейтинг книги
День Астарты

Кодекс Охотника. Книга XXXV

Винокуров Юрий
35. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXXV

Неудержимый. Книга XXVI

Боярский Андрей
26. Неудержимый
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Неудержимый. Книга XXVI