Часть 3 Flashcards

1
Q
  1. Как связан любой пользовательский класс с классом Object
A

Все классы являются наследниками суперкласса Object. Это не нужно указывать явно. В результате объект Object может ссылаться на объект любого другого класса.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q
  1. Расскажите про каждый из методов класса Object
A
  • public final native Class getClass()—возвращает в рантайме класс данного объекта.
  • public native int hashCode()— возвращает хеш-код
  • public boolean equals(Object obj)— сравнивает объекты.
  • protected native Object clone() throws CloneNotSupportedException— клонирование объекта
  • public String toString()— возвращает строковое представление объекта.
  • public final native void notify()—просыпается один поток, который ждет на “мониторе” данного объекта.
  • public final native void notifyAll()— просыпаются все потоки, которые ждут на “мониторе” данного объекта.
  • public final native void wait(long timeout) throws InterruptedException— поток переходит в режим ожидания в течение указанного времени.
  • public final void wait() throws InterruptedException—приводит данный поток в ожидание, пока другой поток не вызоветnotify()илиnotifyAll()методы для этого объекта.
  • public final void wait(long timeout, int nanos) throws InterruptedException—приводит данный поток в ожидание, пока другой поток не вызоветnotify()илиnotifyAll()для этого метода, или пока не истечет указанный промежуток времени.
  • protected void finalize() throws Throwable— вызывается сборщиком мусора, когда garbage collector определил, что ссылок на объект больше нет.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q
  1. Что такое метод equals(). Чем он отличается от операции ==
A

== - сравнивает по ссылкам
equals() - сравнивает по состоянию объектов

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q
  1. Что будет, если переопределить equals не переопределяя hashCode Какие могут возникнуть проблемы
A

Нарушится контракт. Классы и методы, которые использовали правила этого контракта могут некорректно работать. Так для объектаHashMapэто может привести к тому, что пара, которая была помещена в Mapвозможно не будет найдена в ней при обращении к Map, если используется новый экземпляр ключа.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q
  1. Есть ли какие-либо рекомендации о том, какие поля следует использовать при подсчете hashCode
A

Те, которые используют при определении методаequals(). Хэш код должен быть равномерно распределен на области возможных принимаемых значений.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q
  1. Что такое volatile и transient Для чего и в каких случаях можно было бы использовать default
A

volatile — не используется кэш (имеется ввиду область памяти в которой JVM может сохранять локальную копию переменной, чтобы уменьшить время обращения к переменной) при обращении к полю. Для volatile переменной JVM гарантирует синхронизацию для операций чтения/записи, но не гарантирует для операций изменения значения переменной.

у каждого потока есть CPU кэш который копирует
данные которые в главной памяти.
Проблем бы не было если в компьютере не больше 1 CPU.
Но у современных компьютеров их конечно много.

представь что есть счётчик и два потока
поток1 читает и записывает
поток2 только читает
поток не может быть преравн при чтении или записи
так как это атомик операция
но
если поток1 работает на CPU1
а поток2 на CPU2

что случится
0)Значение счётчика в главной памяти - 0
1)поток1 считывает от туда 0
2)поток1 прибавляет к счётчику 1
3)поток1 записывает значение в cpu кэш
4)поток2 считывает значение счётчика из главной памяти,
поскольку в кеше её нет
и получает старое значение 0

ключевое слово volatile
делает так что после записи в CPU
значение сразу записывается в главную память
НО
счётчик++ делает 2 действия
с начала считывает
а потом записывает увеличенное и копирует в главную память.

transient— указание того, что при сериализации/десериализации данное поле не нужно сериализовать/десериализовывать.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q
  1. Расширение модификаторов при наследовании, переопределении и сокрытии методов. Если у класса-родителя есть метод, объявленный как private, может ли наследник расширить его видимость А если protecte А сузить видимость
A

Действует общий принцип: расширять видимость можно, сужать нельзя.privateметоды видны только внутри класса, для потомков они не видны. Поэтому их и расширить нельзя.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q
  1. Имеет ли смысл объявлять метод private final
A

Нет, такой методи такне виден для наследников, а значит не может быть ими переопределен.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q
  1. Какие особенности инициализации final переменных
A
  • Для поля. Поле помеченное при помощи словаfinalне может изменить свое значение после инициализации.
    Не статическое final поле можно инициализировать: при описании, в конструкторе (во всех), в статическом блоке, в динамическом блоке.
    Статическое final поле (static final) инициализируется либо в статическом блоке, либо при описании.
  • Значение локальных переменных, а так же параметров метода помеченных при помощи словаfinalне могут быть изменены после присвоения.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q
  1. Что будет, если единственный конструктор класса объявлен как final
A

К конструктору не применимо ключевое словоfinal.

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