JavaCore5.1: Exceptions & IO/NIO Flashcards

1
Q

Что такое исключения?

A

Исключение — это ошибка (является объектом), возникающая во время выполнения программы.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Опишите иерархию исключений.

A
  1. класс Throwable (checked)
  2. от Throwable -> Error (ошибки JVM) и Exception (checked общие)
  3. от Exception
    • > RuntimeException (unchecked)
    • > IOException, SQLException, ReflectiveOperationException (checked)

4.RuntimeException (unchecked):
ClassCastExceptiuon
IndexOutOfBoundException
AritthmeticException
NullPointerException

checked - зависит от программиста, unchecked - от программиста не зависит”

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Чем Checked исключения отличаются от Unchecked?

A

Checked исключения отличаются от Unchecked исключения в Java, тем что
наличие\обработка Checked исключения проверяются компилятором на этапе компиляции.
Наличие\обработка Unchecked исключения происходит на этапе выполнения.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

О чем говорит ключевое слово throws?

A
  • Метод потенциально может выбросить исключение с указанным типом.
  • Обработка исключения перейдет вышестоящему методу.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Как создать собственное («пользовательское») исключение?

A

Необходимо унаследоваться от базового класса требуемого типа исключений (например, от Exception или RuntimeException).
и переопределит методы

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Расскажите про механизм обработки исключений в java (Try-catch-finally)

A

“Try - блок в котором может появиться исключение;
Catch - блок в котором мы указываем исключение и логику его обработки;
Finally - блок который обязательно отработает”

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Можно ли обрабатывать разные исключения в одном блоке catch?

A

Да, если одно не является нследником второго: будет обработано первое выброшенное, логика обработки их всех будет одинакова.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Может ли метод main() выбросить исключение во вне и если да, то где будет происходить обработка данного исключения?

A

“Может и оно будет передано в виртуальную машину Java (JVM).
Для случая с методом main произойдет две вещи:

  • будет завершен главный поток приложения;
  • будет вызван ThreadGroup.uncaughtException.”
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Что такое механизм try-with-resources?

A

Дает возможность объявлять один или несколько ресурсов в блоке try, которые будут закрыты автоматически без использования finally блока.
В качестве ресурса можно использовать любой объект, класс которого реализует интерфейс java.lang.AutoCloseable или java.io.Closeable.

close() будет выполнетн после блока try{}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Разница между Closeable и Autocloseable

A

Проблема старого интерфейса Closeable была в узости типа исключений, которые может выбрасывать close(). ⦁ Ковариантность позволила расширить тип в базовом интерфейсе AutoCloseable с IOException до Exception.
Еще одно отличие – контракт метода close(). Старый Closeable требует его ⦁ идемпотентности (при многократном вызове мы должны получать один и тот же результат), тогда как новый AutoCloseable разрешает методу иметь побочные эффекты.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Что произойдет если исключение будет выброшено из блока catch после чего другое исключение будет выброшено из метода close() при использовании try-with-resources?

A

В try-with-resources добавленна возможность хранения “подавленных” исключений, и брошенное try-блоком исключение имеет больший приоритет, чем исключения получившиеся во время закрытия.
подавляющее исключение содержит List подавленных исключений

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

В какой иерархии следует обрабатывать Исключения?

A

От потомка к родителю.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

В чем заключается разница между IO и NIO?

A

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 имеются селекторы, которые позволяют одному потоку выполнения мониторить несколько каналов ввода. Т. е. существует возможность зарегистрировать несколько каналов с селектором, а потом использовать один поток выполнения для обслуживания каналов,
имеющих доступные для обработки данные, или для выбора каналов, готовых для записи.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Что такое «каналы»?

A

Логический портал или абстракция объектов более низкого уровня файловой системы.
Буфер - внутренняя конечная точка канала.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Назовите основные классы потоков ввода/вывода?

A

Разделяют два вида потоков ввода/вывода:
* байтовые – java.io.InputStream, java.io.OutputStream;
* символьные – java.io.Reader, java.io.Writer.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Какие подклассы класса InputStream вы знаете, для чего они предназначены?

A
  • InputStream –
    абстрактный класс, описывающий поток ввода;
  • BufferedInputStream –
    буферизованный входной поток;
  • ByteArrayInputStream
    позволяет использовать буфер в памяти (массив байтов) в качестве источника данных для входного потока;
  • DataInputStream –
    входной поток для байтовых данных, включающий методы для чтения стандартных типов данных Java;
  • FileInputStream –
    входной поток для чтения информации из файла;
  • FilterInputStream –
    абстрактный класс, предоставляющий интерфейс для классов-надстроек, которые добавляют к существующим потокам полезные свойства;
  • ObjectInputStream –
    входной поток для объектов;
  • StringBufferInputStream
    превращает строку (String) во входной поток данных InputStream;
  • PipedInputStream
    реализует понятие входного канала;
  • PrintStream
    выходной поток, включающий методы print() и println();
  • PushbackInputStream –
    разновидность буферизации, обеспечивающая чтение байта с последующим его возвратом в поток, позволяет «заглянуть» во входной поток и увидеть, что оттуда поступит в следующий момент, не извлекая информации;
  • SequenceInputStream
    используется для слияния двух или более потоков InputStream в единый.
17
Q

Какой класс позволяет читать данные из входного байтового потока в
формате примитивных типов данных?

A

Класс DataInputStream представляет поток ввода и предназначен для чтения данных примитивных типов, таких, как int, double и т. д. Для каждого примитивного типа определен свой метод для считывания:
* boolean readBoolean(): считывает из потока булевое однобайтовое значение;
* byte readByte(): считывает из потока 1 байт;
- …

18
Q

Какие подклассы класса Reader вы знаете, для чего они предназначены?

A
  • Reader – абстрактный класс, описывающий символьный ввод;
  • BufferedReader – буферизованный входной символьный поток;
  • CharArrayReader – входной поток, который читает из символьного массива;
  • FileReader – входной поток, читающий файл;
  • FilterReader – абстрактный класс, предоставляющий интерфейс для классов-
    надстроек;
  • InputStreamReader – входной поток, транслирующий байты в символы;
  • LineNumberReader – входной поток, подсчитывающий строки;
  • PipedReader – входной канал;
  • PushbackReader – входной поток, позволяющий возвращать символы обратно в поток;
  • StringReader – входной поток, читающий из строки.
19
Q

Чем отличаются и что общего у InputStream, OutputStream, Reader, Writer?

A
  • InputStream и его наследники – совокупность для получения байтовых данных из
    различных источников;
  • OutputStream и его наследники – набор классов определяющих потоковый байтовый
    вывод;
  • Reader и его наследники определяют потоковый ввод символов Unicode;
  • Writer и его наследники определяют потоковый вывод символов Unicode.
20
Q

Какие классы позволяют преобразовать байтовые потоки в символьные и
обратно?

A
  • OutputStreamWriter – «мост» между классом OutputStream и классом Writer, символы, записанные в поток, преобразовываются в байты;
  • InputStreamReader – аналог для чтения, при помощи методов класса Reader читаются байты из потока InputStream и далее преобразуются в символы.
21
Q

Какие классы позволяют ускорить чтение/запись за счет использования
буфера?

A
  • BufferedInputStream(InputStream in)/BufferedInputStream(InputStream in, int size);
  • BufferedOutputStream(OutputStream out)/BufferedOutputStream(OutputStream out, int
    size);
  • BufferedReader(Reader r)/BufferedReader(Reader in, int sz);
  • BufferedWriter(Writer out)/BufferedWriter(Writer out, int sz).
22
Q

Какой класс предназначен для работы с элементами файловой системы?

A

File работает непосредственно с файлами и каталогами. Данный класс позволяет создавать
новые элементы и получать информацию существующих: размер, права доступа, время и
дату создания, путь к родительскому каталогу.

23
Q

Какие методы класса File вы знаете?

A

Наиболее используемые методы класса File:
* boolean createNewFile(): делает попытку создать новый файл;
* boolean delete(): делает попытку удалить каталог или файл;
* boolean mkdir(): делает попытку создать новый каталог;
* boolean renameTo(File dest): делает попытку переименовать файл или каталог;
* boolean exists(): проверяет, существует ли файл или каталог;
* String getAbsolutePath(): возвращает абсолютный путь для пути, переданного в
конструктор объекта;
* String getName(): возвращает краткое имя файла или каталога;
* String getParent(): возвращает имя родительского каталога;
* boolean isDirectory(): возвращает значение true, если по указанному пути
располагается каталог;
* boolean isFile(): возвращает значение true, если по указанному пути находится файл;
* boolean isHidden(): возвращает значение true, если каталог или файл являются
скрытыми;
* long length(): возвращает размер файла в байтах;
* long lastModified(): возвращает время последнего изменения файла или каталога;
* String[] list(): возвращает массив файлов и подкаталогов, которые находятся в
определенном каталоге;
* File[] listFiles(): возвращает массив файлов и подкаталогов, которые находятся в
определенном каталоге.

24
Q

Как выбрать все элементы определенного каталога по критерию
(например, с определенным расширением)?

A

Метод File.listFiles() возвращает массив объектов File, содержащихся в каталоге. Метод
может принимать в качестве параметра объект класса, реализующего FileFilter. Это
позволяет включить в список только те элементы, для которых метод accept возвращает true
(критерием может быть длина имени файла или его расширение).

25
Q

Что такое «абсолютный путь» и «относительный путь»?

A

Абсолютный (полный) путь – это путь, который указывает на одно и то же место в файловой
системе вне зависимости от текущей рабочей директории или других обстоятельств. Полный
путь всегда начинается с корневого каталога.
Относительный путь представляет собой путь