


















Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
Документ описывает концепцию исключений в языке программирования Java. Исключение представляет собой альтернативный поток управления, который возникает при обнаружении ошибки в программе. Документ рассматривает основные понятия, связанные с исключениями, такие как источник исключения, данные исключения, защищенная секция try-catch-finally, делегирование и синтаксический контроль исключений. Также описываются различные виды исключений, такие как контролируемые и неконтролируемые исключения, и способы их обработки. Кроме того, в документе затрагивается тема рефлексии - доступа к данным программы о собственной структуре. Документ будет полезен студентам, изучающим основы программирования на Java, а также разработчикам, желающим углубить свои знания в области обработки ошибок и исключений.
Typology: Lecture notes
1 / 26
This page cannot be seen from the preview
Don't miss anything!



















Исключение – альтернативный поток управления при обнаружении
ошибки в программе
Альтернативный поток управления – цепочка return – «разматывание»
стека с разрушением локальной среды исполнения методов
Источник исключения – оператор throw (генерация исключения)
Данные исключения – объект класса Exception или его наследники
(интерфейс Throwable)
Защищенная секция try {} catch…catch…finally
catch(Exception ee) – безымянная функция (Inline) с параметром – типом
исключения, Annotations текущий класс исключения и его наследников
традиционная
схема обработки
ошибок
обработка
исключения (Си++)
Делегирование и синтаксический контроль исключений:
если исключение XException класса генерируется в текущем методе или
в вызовах, синтаксически проверяется:
имеется обработчик исключения, т.е. источник заключен в try-
catch(XException ee){}
throws XException {}
во втором случае метод является потенциальным источником
исключения и его вызов синтаксически контролируется
Блок finally {} содержит код, который гарантированно выполняется при
наличии или отсутствии генеририруемых исключений и их вариантов их
обработки:
finally гарантированно выполняется вне зависимости от выполнения try-
catch и ретранслирует то исключение, которое возникло (или его
отсутствие) :
отсутствие (-),
необработанное в try-catch(+)
обработанное в catch(-)
возникшее в finally исключение не обрабатывается и передается наверх
(двойные ошибки не обрабатываются)
Технология обработки исключений:
вернуть null-ссылку
генерировать исключение (серьезные случаи, чем больше
исключений, тем больше обработчиков)
возвращать объект с внутренним статусом «невалидный»
(Scala – контейнер со аналогом null-ссылки)
в проекте привести все исключения к одному классу, в котором
локализовать политику их обработки
Конвейерная система классов:
классы- источники данных основаны на абстрактных классах
InputStream и OutputStream, реализуют модель физического потока
байтов
файловой системе
ByteArrayInputStream,ByteArrayOutputStream – массив байтов в
памяти (toByteArray())
PipedInputStream, PipedOutputStream – поток данных,
передаваемый через канал ( Pipe ), имеющий внутреннюю
буферизацию. При конструировании объекта-потока он получает в
качестве параметра объект «противоположного» класса (Input-
Output и наоборот), и они поддерживают внутренний буфер, через
который обмениваются данными
последовательно из нескольких потоков
Сетевое соединение на сокете (класс Socket) может создавать
потоки (классы, производные от InputStream и OutputStream)
классы форм представления данных в потоке:
DataInputStream, DataOutputStream – потоки двоичных данных
InputStreamReader, OutputStreamWriter – потоки символьных
данных в Unicode с перекодировкой из байтного представления,
получаемого в исходных потоках
ObjectInputStream, ObjectOutputStream – двоичные потоки
сериализуемых объектов (универсальная сериализация,
выполняемая JVM).
вспомогательные функции по буферизации данных и т.п.:
символьном потоке на основе буферизации;
PushbackReader – символьный поток с возможностью возврата
символов и повторного перечитывания;
PrintStream – символьный поток с возможностью форматного
вывода данных примитивных типов (аналогично printf в Си).
Сериализация - передача в потоке данных значений полей данных
объекта (и, возможно, его описания). При приеме (чтении)
сериализованного потока происходит создание объектов необходимых
классов, данные которых находятся в последовательности
Формат – описание порядка следования данных в последовательном
потоке. В формате очередной элемент является либо элементом данных,
либо управляющим элементом, содержащим параметры следующих за ним
данных ( саморазворачивающийся, иерархический, рекурсивный ):
счетчик количества последующих элементов
физическая длина последующего поля данных в байтах
тег – обозначение вида последующего формата или его свойства
форматная строка – строка, содержащая специальные символы, на место
которых подставляются значения в порядке их следования за самой
строкой.
Виды сериализации:
класс сохраняет свои данные в поток в своем собственном формате,
который «зашит» в коде этого класса
универсальная сериализация объектов произвольных классов в двоичный
поток средствами JVM (Java-сериализация)
поток в формате XML/JSON с использованием соответствующих библиотек
Сериализация JVM
XML- cериализация
Поток управления – последовательность исполняемых команд кода, логика
исполнения программы команда за командой.
Процесс в ОС – адресное пространство (память кода и данных) + ресурсы +
потоки
Поток – «функция, исполняемая параллельно main», внутренний
параллелизм в программе
Особенности потоков в Java:
поток состоит из двух компонент – компонента исполняемого кода потока и
управляющий объект (дескриптор) – класс Thread
программный код потока – это метод run в объекте с присоединенным
интерфейсом Runnable. Runnable – обозначением исполняемого кода
(таймер, отложенное исполнение)
связывание объекта Thread с управляющим кодом в методе run :
путем создания производного класса от Thread и переопределения в
нем метода run;
присоединенным интерфейсом Runnable и переопределенным
методом run.