русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Переопределение методов и исключения


Дата добавления: 2015-06-12; просмотров: 1309; Нарушение авторских прав


При переопределении методов следует помнить, что если переопределяемый метод объявляет список возможных исключений, то переопределяющий метод не может расширять этот список, но может его сужать. Рассмотрим пример:

public class BaseClass{

public void method {) throws lOException {} }

public class LegalOne extends BaseClass { public void method {) throws lOException {} }

public class LegalTwo extends BaseClass { public void method () {} }

public class LegalTree extends BaseClass { public void method ()

throws EOFException.MalformedURLException {} }

public class IllegalOne extends BaseClass { public void method {)

throws lOException,lllegalAccessException {} }

public class lllegalTwo extends BaseClass { public void method () {

throw new ExceptlonO; } }

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

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

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

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

• определение класса llegalOne будет некорректным, так как пере­определение метода method() неверно (lllegalAccessException не является подклассом lOException, список расширился);

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

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

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



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

import Java.io.*; public class Test {

public TestO {}

public static void main(Stnng[] args) {

Test test = new Test();

try{test.doFilelnputC'bogus.file");}

catch (lOException ex) {System.out.println("Second exception hadlestarck trace");

ex. printStackTraceO; } }

private String doFilelnput(String fileName)

throws FileNotFoundException,lOException { String retStr =""; java.io.FilelnputStream fis = null; try{ fis = new java.io,FilelnputStream(fileName); } catch (FileNotFoundException ex) {

System.out.println("First exception hadle starck trace");

ex.printStackTrace{);

throw ex;}

return retStr;} }

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

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

at java.io.FilelnputStream.open{Native Method)

atjava.io.FilelnputStream.<inlt>{FilelnputStream.java:64)

atexperiment.Test.doFilelnput(Test.java:33)

at experiment.Test.main(Test.java:21) First exception hadle starck trace

Java.io.FileNotFoundException: bogus.file (The system cannot find the file specified)

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

atjava.io.FilelnputStream.<inJt>{FilelnputStream.java:64)

atexperiment.Test.doFilelnput(Test.java:33)

at experiment.Test.main(Test.java:21) Second exception hadle starck trace

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

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

import java.io.*; public class Test {public Test() {}

public static void main(String[] args) { Test test = new Test{);

try{test.doFilelnput{);}

catch (lOException ex) {

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

ex. pr i ntStackTrace(); } }

private String doFilelnput{)

throws FileNotFoundException,IOException{ String retStr =""; java.io.FilelnputStream fis = null; try{fis = new java.io.FilelnputStreamC'bogus.file");}

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

ex.printStackTraceO;

fis = new Java.Jo.FilelnputStreamC'anotherBogus.file");

throw ex;}

return retStr;} }

Java.io.FileNotFoundException: bogus.file (The system cannot find the file specified)

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

atjava.io.FilelnputStream.<init>(FilelnputStream.java:64)

atexperiment.Test.doFilelnput(Test.java;33)

at experiment.Test.main(Test.java:21) Exception hash code 3214658

Java.io.FileNotFoundException: (The system cannot find the path specified)

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

atjava.io.File(nputStream.<init>(FilelnputStream.java:64)

atexperiment.Test.doFilelnput(Test.java:38)

at experiment.Test.main(Test.java:21) Exception hash code 6129586

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



<== предыдущая лекция | следующая лекция ==>
Проверяемые и непроверяемые исключения | Заключение


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.354 сек.