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

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

Жанры

Программирование на 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

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

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

Сирийский рубеж 2

Дорин Михаил
6. Рубеж
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Сирийский рубеж 2

Варяг

Мазин Александр Владимирович
1. Варяг
Фантастика:
альтернативная история
9.10
рейтинг книги
Варяг

Наследие Маозари 4

Панежин Евгений
4. Наследие Маозари
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Наследие Маозари 4

Воронцов. Перезагрузка. Книга 3

Тарасов Ник
3. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
фантастика: прочее
6.00
рейтинг книги
Воронцов. Перезагрузка. Книга 3

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

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

Искатель 3

Шиленко Сергей
3. Валинор
Фантастика:
попаданцы
рпг
фэнтези
5.00
рейтинг книги
Искатель 3

Точка Бифуркации IV

Смит Дейлор
4. ТБ
Фантастика:
героическая фантастика
городское фэнтези
попаданцы
5.00
рейтинг книги
Точка Бифуркации IV

Гранит науки. Том 1

Зот Бакалавр
1. Героями не становятся, ими умирают
Фантастика:
фэнтези
боевая фантастика
5.25
рейтинг книги
Гранит науки. Том 1

Я все еще князь. Книга XXI

Дрейк Сириус
21. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я все еще князь. Книга XXI

Третий

INDIGO
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий

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

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

Гримуар темного лорда VII

Грехов Тимофей
7. Гримуар темного лорда
Фантастика:
боевая фантастика
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Гримуар темного лорда VII

Отвергнутая невеста генерала драконов

Лунёва Мария
5. Генералы драконов
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Отвергнутая невеста генерала драконов

Барон обходит правила

Ренгач Евгений
14. Закон сильного
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Барон обходит правила