Exceptions, Strings, IO Flashcards
Что означает реализация интерфейса Cloneable?
Это маркер-интерфейс, и он указывает, что класс который реализует этот интерфейс переопределяет метод clone()
Что такое клонирование объекта? Типы клонирования
Это создание копий объекта.
Глубокое - когда копируются все поля объекта
Неглубокое - когда копируется только сам объект, а поля ссылаются на поля объекта-оригинала.
Что означает реализация интерфейса AutoClosable?
То, что у класса есть метод void close(), и он освобождает ресурсы, которые мог захватить объект.
Только класс который реализует этот интерфейс или его наследников, может использоваться в конструкции try-with-resoures
Что означает реализация интерфейса Iterable?
Указывает на то, что экземпляр класса может использоваться в конструкции foreach
Что означает реализация интерфейса Comporable?
Означает что объекты этого класса можно отсортировать
Что такое классы-оболочки, зачем они используются?
Это объектное представление простых типов.
Используется везде где нужно использовать объект а не примитив
Что такое класс Object и какие методы есть в этом классе?
public wait(), notify(), notifyAll() toString() hashcode() getClass() equals(Object obj)
protected%
clone()
finalize()
Какой класс называют immutable, а какой mutable?
Immutable - класс, экземпляр которого может иметь только одно внутреннее состояние, в течении жизненного цикла. При изменении такого объекта создается всегда новый объект.
Какие immutable классы вы знаете?
String обертки примитивов java.math.BigInteger java.math.BigDecimal java.io.File java.util.Locale
Как сделать immutable объект
Не делать setter методов
Все поля private final, инициализация через конструкторы
Запретить подклассам переопределять методы
Методы не должны изменять внутреннее состояние текущего объекта
При необходимости именять объект, нужно клонировать его и работать с его копией.
Сделать конструктор private и создавать экземпляры через фабричный метод
Какие свойства у immutable объекта?
Безопасность (неизменяемость)
Потокобезопасность
Производительность
Объясните потокобезопасность immutable объектов?
Поскольку их нельзя изменить, потоки могут спокойно читать значения и для всех оно будет всегда одинаковым
Объясните производительность immutable объектов?
Их можно кэшировать и запрещать делать одинаковые по контенту объекты
hashcode можно считать всего один раз, при создании объекта
Главный недостаток immutable объектов?
Их нельзя изменять. Если есть потребность их изменять падает очень производительность.
Что делает со строкой метод intern()?
Кладет строку в пул строк и возвращает ссылку.
Какой из классов String, StringBuffer,StringBuilder объявлен как final?
Все
Вам нужно создать строку, содержащую 1000000 случайных чисел, разделенных запятой. Как это сделать?
Использовать класс StringBuilder и метод append()
String не использовать потому что immutable
StringBuffer - не использовать потому что медленнее из-за потокобезопасности
Чем отличается String, StringBuffer и StringBuilder
String - immutable
StringBuilder StringBuffer - mutable
StringBuffer - потокобезопасный, StringBuilder - нет
Сколько объектов будет создано String s1 = new String("abc"); String s2 = "abc";
Два
Один строковый литерал “abc”
Второй new
Почему строки удобно использовать как ключи в HashMap?
Строки immutable
hashcode вычисляется во время создания строки один раз, и не нужно его пересчитывать много раз
String s1 =new String("abc"); String s2 =new String("abc"); System.out.println(s1==s2);
false