Исключения в Java, Lecture notes of Law

Документ описывает концепцию исключений в языке программирования Java. Исключение представляет собой альтернативный поток управления, который возникает при обнаружении ошибки в программе. Документ рассматривает основные понятия, связанные с исключениями, такие как источник исключения, данные исключения, защищенная секция try-catch-finally, делегирование и синтаксический контроль исключений. Также описываются различные виды исключений, такие как контролируемые и неконтролируемые исключения, и способы их обработки. Кроме того, в документе затрагивается тема рефлексии - доступа к данным программы о собственной структуре. Документ будет полезен студентам, изучающим основы программирования на Java, а также разработчикам, желающим углубить свои знания в области обработки ошибок и исключений.

Typology: Lecture notes

2022/2023

Uploaded on 07/02/2023

Azizbek-Matyakubov
Azizbek-Matyakubov 🇺🇿

5 documents

1 / 26

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
Исключения
Исключение – альтернативный поток управления при обнаружении
ошибки в программе
Альтернативный поток управления – цепочка return – «разматывание»
стека с разрушением локальной среды исполнения методов
Источник исключения – оператор throw (генерация исключения)
Данные исключения – объект класса Exception или его наследники
(интерфейс Throwable)
Защищенная секция try {} catch…catch…finally
catch(Exception ee) – безымянная функция (Inline) с параметром – типом
исключения, Annotations текущий класс исключения и его наследников
традиционная
схема обработки
ошибок
обработка
исключения (Си++)
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a

Partial preview of the text

Download Исключения в Java and more Lecture notes Law in PDF only on Docsity!

Исключения

Исключение – альтернативный поток управления при обнаружении

ошибки в программе

Альтернативный поток управления – цепочка return – «разматывание»

стека с разрушением локальной среды исполнения методов

Источник исключения – оператор throw (генерация исключения)

Данные исключения – объект класса Exception или его наследники

(интерфейс Throwable)

Защищенная секция try {} catch…catch…finally

catch(Exception ee) – безымянная функция (Inline) с параметром – типом

исключения, Annotations текущий класс исключения и его наследников

традиционная

схема обработки

ошибок

обработка

исключения (Си++)

Исключения

Делегирование и синтаксический контроль исключений:

если исключение XException класса генерируется в текущем методе или

в вызовах, синтаксически проверяется:

имеется обработчик исключения, т.е. источник заключен в try-

catch(XException ee){}

  • исключение делегируется наверх в заголовке метода void F()

throws XException {}

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

исключения и его вызов синтаксически контролируется

Блок finally {} содержит код, который гарантированно выполняется при

наличии или отсутствии генеририруемых исключений и их вариантов их

обработки:

finally гарантированно выполняется вне зависимости от выполнения try-

catch и ретранслирует то исключение, которое возникло (или его

отсутствие) :

отсутствие (-),

необработанное в try-catch(+)

обработанное в catch(-)

  • возникшее в catch(+)

возникшее в finally исключение не обрабатывается и передается наверх

(двойные ошибки не обрабатываются)

Исключения

Технология обработки исключений:

  • варианты обработки ошибок

вернуть null-ссылку

генерировать исключение (серьезные случаи, чем больше

исключений, тем больше обработчиков)

возвращать объект с внутренним статусом «невалидный»

(Scala – контейнер со аналогом null-ссылки)

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

локализовать политику их обработки

2-5. Исключения

Рефлекcия

Рефлекcия

2-7. Ввод-вывод. Сериализация

Конвейерная система классов:

классы- источники данных основаны на абстрактных классах

InputStream и OutputStream, реализуют модель физического потока

байтов

  • FileOutputStreamm, FileInputStream – файлы в локальной

файловой системе

ByteArrayInputStream,ByteArrayOutputStream – массив байтов в

памяти (toByteArray())

PipedInputStream, PipedOutputStream – поток данных,

передаваемый через канал ( Pipe ), имеющий внутреннюю

буферизацию. При конструировании объекта-потока он получает в

качестве параметра объект «противоположного» класса (Input-

Output и наоборот), и они поддерживают внутренний буфер, через

который обмениваются данными

  • SequenceInputStream – поток данных, соединяющий в себе данные

последовательно из нескольких потоков

Сетевое соединение на сокете (класс Socket) может создавать

потоки (классы, производные от InputStream и OutputStream)

2-7. Ввод-вывод. Сериализация

классы форм представления данных в потоке:

DataInputStream, DataOutputStream – потоки двоичных данных

InputStreamReader, OutputStreamWriter – потоки символьных

данных в Unicode с перекодировкой из байтного представления,

получаемого в исходных потоках

ObjectInputStream, ObjectOutputStream – двоичные потоки

сериализуемых объектов (универсальная сериализация,

выполняемая JVM).

вспомогательные функции по буферизации данных и т.п.:

  • BufferedReader, BufferedWriter – построчное чтение и запись в

символьном потоке на основе буферизации;

PushbackReader – символьный поток с возможностью возврата

символов и повторного перечитывания;

PrintStream – символьный поток с возможностью форматного

вывода данных примитивных типов (аналогично printf в Си).

2-7. Ввод-вывод. Сериализация

Сериализация - передача в потоке данных значений полей данных

объекта (и, возможно, его описания). При приеме (чтении)

сериализованного потока происходит создание объектов необходимых

классов, данные которых находятся в последовательности

Формат – описание порядка следования данных в последовательном

потоке. В формате очередной элемент является либо элементом данных,

либо управляющим элементом, содержащим параметры следующих за ним

данных ( саморазворачивающийся, иерархический, рекурсивный ):

счетчик количества последующих элементов

физическая длина последующего поля данных в байтах

  • символ (значение) – ограничитель последовательности данных

тег – обозначение вида последующего формата или его свойства

форматная строка – строка, содержащая специальные символы, на место

которых подставляются значения в порядке их следования за самой

строкой.

Ввод-вывод. Сериализация

Виды сериализации:

  • «ручная» сериализация собственных данных классами программы. Каждый

класс сохраняет свои данные в поток в своем собственном формате,

который «зашит» в коде этого класса

универсальная сериализация объектов произвольных классов в двоичный

поток средствами JVM (Java-сериализация)

  • универсальная сериализация объектов произвольных классов в тестовый

поток в формате XML/JSON с использованием соответствующих библиотек

2-7. Ввод-вывод. Сериализация

Ввод-вывод. Сериализация

Сериализация JVM

Ввод-вывод. Сериализация

XML- cериализация

2-8. Параллелизм. Потоки

Поток управления – последовательность исполняемых команд кода, логика

исполнения программы команда за командой.

Процесс в ОС – адресное пространство (память кода и данных) + ресурсы +

потоки

Поток – «функция, исполняемая параллельно main», внутренний

параллелизм в программе

Особенности потоков в Java:

поток состоит из двух компонент – компонента исполняемого кода потока и

управляющий объект (дескриптор) – класс Thread

программный код потока – это метод run в объекте с присоединенным

интерфейсом Runnable. Runnable – обозначением исполняемого кода

(таймер, отложенное исполнение)

связывание объекта Thread с управляющим кодом в методе run :

путем создания производного класса от Thread и переопределения в

нем метода run;

  • путем передачи в конструкторе класса Thread ссылки на объект с

присоединенным интерфейсом Runnable и переопределенным

методом run.