JavaCore5.1: Exceptions & IO/NIO Flashcards
Что такое исключения?
Исключение — это ошибка (является объектом), возникающая во время выполнения программы.
Опишите иерархию исключений.
- класс Throwable (checked)
- от Throwable -> Error (ошибки JVM) и Exception (checked общие)
- от Exception
- > RuntimeException (unchecked)
- > IOException, SQLException, ReflectiveOperationException (checked)
4.RuntimeException (unchecked):
ClassCastExceptiuon
IndexOutOfBoundException
AritthmeticException
NullPointerException
checked - зависит от программиста, unchecked - от программиста не зависит”
Чем Checked исключения отличаются от Unchecked?
Checked исключения отличаются от Unchecked исключения в Java, тем что
наличие\обработка Checked исключения проверяются компилятором на этапе компиляции.
Наличие\обработка Unchecked исключения происходит на этапе выполнения.
О чем говорит ключевое слово throws?
- Метод потенциально может выбросить исключение с указанным типом.
- Обработка исключения перейдет вышестоящему методу.
Как создать собственное («пользовательское») исключение?
Необходимо унаследоваться от базового класса требуемого типа исключений (например, от Exception или RuntimeException).
и переопределит методы
Расскажите про механизм обработки исключений в java (Try-catch-finally)
“Try - блок в котором может появиться исключение;
Catch - блок в котором мы указываем исключение и логику его обработки;
Finally - блок который обязательно отработает”
Можно ли обрабатывать разные исключения в одном блоке catch?
Да, если одно не является нследником второго: будет обработано первое выброшенное, логика обработки их всех будет одинакова.
Может ли метод main() выбросить исключение во вне и если да, то где будет происходить обработка данного исключения?
“Может и оно будет передано в виртуальную машину Java (JVM).
Для случая с методом main произойдет две вещи:
- будет завершен главный поток приложения;
- будет вызван ThreadGroup.uncaughtException.”
Что такое механизм try-with-resources?
Дает возможность объявлять один или несколько ресурсов в блоке try, которые будут закрыты автоматически без использования finally блока.
В качестве ресурса можно использовать любой объект, класс которого реализует интерфейс java.lang.AutoCloseable или java.io.Closeable.
close() будет выполнетн после блока try{}
Разница между Closeable и Autocloseable
Проблема старого интерфейса Closeable была в узости типа исключений, которые может выбрасывать close(). ⦁ Ковариантность позволила расширить тип в базовом интерфейсе AutoCloseable с IOException до Exception.
Еще одно отличие – контракт метода close(). Старый Closeable требует его ⦁ идемпотентности (при многократном вызове мы должны получать один и тот же результат), тогда как новый AutoCloseable разрешает методу иметь побочные эффекты.
Что произойдет если исключение будет выброшено из блока catch после чего другое исключение будет выброшено из метода close() при использовании try-with-resources?
В try-with-resources добавленна возможность хранения “подавленных” исключений, и брошенное try-блоком исключение имеет больший приоритет, чем исключения получившиеся во время закрытия.
подавляющее исключение содержит List подавленных исключений
В какой иерархии следует обрабатывать Исключения?
От потомка к родителю.
В чем заключается разница между IO и NIO?
1) Java IO (input-output) является потокоориентированным, а Java NIO (new/non-blocking io) – буфер-ориентированным. Потокоориентированный ввод/вывод подразумевает чтение/запись из потока/в поток одного или нескольких байт в единицу времени поочередно. Данная информация нигде не кешируются. Таким образом, невозможно произвольно двигаться по потоку данных вперед или назад. В Java NIO данные сначала считываются в буфер, что дает больше гибкости при обработке данных.
2) Потоки ввода/вывода в Java IO являются блокирующими. Это значит, что когда в потоке выполнения вызывается read() или write() метод любого класса из пакета java.io, происходит блокировка до тех пор, пока данные не будут считаны или записаны. Поток выполнения в данный момент не может делать ничего другого.
Неблокирующий режим Java NIO позволяет запрашивать считанные данные из канала (channel) и получать только то, что доступно на данный момент, или вообще ничего, если доступных данных пока нет. Вместо того, чтобы оставаться заблокированным, пока данные не станут доступными для считывания, поток выполнения может заняться чем-то другим. То же самое справедливо и для неблокирующего вывода. Поток выполнения может запросить запись в канал некоторых данных, но не дожидаться при этом, пока они не будут полностью записаны:
В Java NIO имеются селекторы, которые позволяют одному потоку выполнения мониторить несколько каналов ввода. Т. е. существует возможность зарегистрировать несколько каналов с селектором, а потом использовать один поток выполнения для обслуживания каналов,
имеющих доступные для обработки данные, или для выбора каналов, готовых для записи.
Что такое «каналы»?
Логический портал или абстракция объектов более низкого уровня файловой системы.
Буфер - внутренняя конечная точка канала.
Назовите основные классы потоков ввода/вывода?
Разделяют два вида потоков ввода/вывода:
* байтовые – java.io.InputStream, java.io.OutputStream;
* символьные – java.io.Reader, java.io.Writer.