рівень 21

Рівень 21. Відповіді на питання до співбесіди по темі рівня.

1. Перерахуйте методи класу Object
equals ()
hashCode ()
toString ()
getClass ()
notify ()
notifyAll ()
wait ()
wait (long timeOut)
wait (long timeOut, int nanos)

3. Що буде, якщо перевизначити equals, але не перевизначити hashCode?
спочатку hashCode - випадкове число.
Колекції в Java перед тим як порівняти об'єкти за допомогою equals завжди шукають / порівнюють їх за допомогою методу hashCode (). І якщо у однакових об'єктів будуть різні hashCode, то об'єкти будуть вважатися різними - до порівняння за допомогою equals просто не дійде.

4. Навіщо потрібні методи wait, notify, notifyAll?
Іноді в програмі може виявитися така ситуація, що нитка увійшла в блок коду synchronized, заблокувала монітор і не може працювати далі, тому що якихось даних ще не вистачає: наприклад, файл який вона має опрацювати ще не завантажився або що-небудь в такому дусі. Для вирішення цієї проблеми і був придуманий метод wait (). Виклик цього методу призводить до того, що нитка звільняє монітор і «стає на паузу».
Для зняття з паузи використовуються методи notify, notifyAll. Метод notify «розморожує» одну випадкову нитку, метод notifyAll - все «заморожені» нитки даного монітора.

5. Як правильно клонувати об'єкт?
Два типу клонування.
Для клонування об'єкта за замовчуванням потрібно:
а) Додати інтерфейс Cloneable своєму класу
б) Відхилити метод clone і викликати в ньому базову реалізацію:

class Point implements Cloneable


Або можна написати реалізацію методу clone самому:


6. Навіщо потрібен метод finalize () і як він працює?
Якщо ти пам'ятаєш, то finalize () - це спеціальний метод, який викликається у об'єкта перед тим, як збирач сміття його знищить.
Основна мета цього методу - звільнити використовувані зовні не-Java ресурси: закрити файли, потоки введення-виведення і т.п.

finalize () працює нестабільно.
Цей метод не виправдовує покладених на нього сподівань. Java-машина може відкласти знищення об'єкта, як і виклик методу finalize на скільки завгодно. Більш того, вона взагалі не гарантує, що цей метод буде викликаний. У купі ситуацій заради «оптимізації» він не викликається.

finalize- метод в класі Object см 6.

8. Що таке try-with-resources?
Це спеціальна конструкція try, звана try-with-resources, в якій Зверни увагу - після try слідують круглі дужки, де оголошуються змінні і створюються об'єкти. Ці об'єкти можна використовувати всередині блоку try, позначеного дужками <>. Коли виконання команд блоку try закінчиться, незалежно від того - нормально воно закінчилося або було виключення, для об'єкта, створеного всередині круглих дужок (), буде викликаний метод close ();

9. Чим відрізняються методи wait (1000) і sleep (1000)?
sleep () призупиняє потік на вказане. стан змінюється на TIMED_WAITING, по закінченню - RUNNABLE

wait () змінює стан потоку на WAITING
може бути викликано тільки у об'єкта володіє блокуванням, в іншому випадку викине виняток IllegalMonitorStateException. при спрацьовуванні методу блокування відпускається, що дозволяє продовжити роботу іншим потокам очікують захопити ту ж саму блокування. в разі wait (int) з аргументом стан буде TIMED_WAITING

10. У чому відмінність i ++ і ++ i?
++i, i спочатку збільшується на 1, потім бере участь у вираженні.
i ++, i спочатку бере участь у вираженні, потім збільшується на 1.

Схожі статті