Java интервю

Java Интервю. Въпроси и отговори

1. Какво е обект на класа? Какво е нужно методи?
Обект е базов клас за всички останали обекти в Java. Всеки клас наследява от обекта. Съответно, всички класове наследяват методите на класа Object.
Методи на класа на обекта:

  • обществен окончателен родния клас getClass ()
  • обществен родния вътр хеш-код ()
  • обществен булев е равно на (OBJ Object)
  • клонинг защитена родния Object () хвърля CloneNotSupportedException
  • обществен String ToString ()
  • обществен окончателен родния невалидни уведоми ()
  • обществен окончателен родния невалидни notifyAll ()
  • обществен окончателен родния невалидни изчакване (дълго изчакване) хвърля InterruptedException
  • обществен окончателен невалидни изчакване (дълго изчакване, вътр Нанос) хвърля InterruptedException
  • обществен окончателен невалидни изчакване () хвърля InterruptedException
  • защитени невалидни финализира () хвърля Може да се изхвърли

Забележка: Може да се каже, че има и друг метод частни статични родния невалидни registerNatives () За да завърши прегледа.

2. Какво е за равенство () метод. По какво се различава от работата ==.
е равно на () метод е съотношението на еквивалентност на обекти. Еквивалентно е отношението, което е симетрична, преходен и рефлексивен.

  • Рефлексивност: за всяка ненулева х, x.equals (х) се връщат истински;
  • Преходност: за всяка ненулева X, Y и Z, ако x.equals (у) и (Z) y.eqals връща вярно, тогава x.equals (Z) връщане вярно;
  • Симетрия: за всеки ненулев х и у, x.equals (у) трябва да се върнат верни, тогава и само тогава, kogday.equals (х) връща истина.

Също така, за всеки ненулев х. x.equals (нулеви) трябва да се върнат фалшиви.
Различията между равни () на операцията == в клас Object не. Това се вижда при разглеждане на сорс кода на метода е равен на класа на обекта:

обществени булеви равни (OBJ Object) възвръщаемост (това == OBJ);
>

Въпреки това, не трябва да забравяме, че ако обектът или не разглежда (нула), след викането на метода се равнява на обекта ще доведе до NullPointerException. Също така не забравяйте, че при сравняване на два обекта може да се счита за невалидно и експлоатация obj1 == obj2 в този случай е вярно, и повикването се равнява ще доведе до NullPointerException.
Както можем да видим, с помощта на операция == сравнява препратки към обекти. Но ние можем да замени метода е равно, като по този начин за създаване на логиката на сравняване на два обекта. Помислете например за сравняване на два еднакви номера, създадени с помощта на класа Integer:

Ако погледнете вътре равен метод на клас Integer, виждаме:

Ясно е, че тук не е сравнение на референции, и сравнява стойностите на Int.

3. Ако искате да го замените равни (), какви условия трябва да бъдат изпълнени за подтиснатия метод?
Тези условия са изброени в параграф 2.

4. Ако е равно на () отменени, ако има някакви други методи, които трябва да бъдат заменени?
Да, est.Nuzhno замени метода на хеш-код (). Равни обекти трябва да се върнат на същата хеш кода. Например при метод клас цяло число хеш-код () е предефинирани, както следва:

обществен инт хеш-код () връщане стойност;
>

стойност е стойността на частното, който държи Integer обект клас. Всъщност това е номера.

5. Какво е () метода на хеш-код?
За да започнете, нека да си спомним, че този хеш и хашиш. Сега си спомни известните класове като HashMap, HashSet, Hashtable, които се основава на изчисляване на функцията на хашиш. Именно чрез хеш можем да вмъкнем и извличане на данни в O (1), което е, по време на пропорционалното изчисляване на функцията на хашиш.
Помислете например за поставяне на елементи в HashMap:

обществен V пут (K ключ, V стойност) ...
Int хеш = хеш (key.hashCode ());
Int J = indexFor (хеш, table.length);
...
addEntry (хеш, ключ, стойност, I);
...
>

Както можем да видим, аз-ти вмъкнете обект се изчислява хеша. И ние трябва да се изчисли добра хеш функция, за да се получи равномерно разпределение и по-малко сблъсъци.
Това е отговорът на въпроса се крие във факта, че има колекция (HashMap, HashSet), който се използва код за сегментиране, като основа за работа с обекти. И ако хеша за равни предмети ще бъде различен в HashMap са две равни стойности, това е грешка. Ето защо, подходящ начин трябва да има приоритет метод хеш-код ().

6. Каква е връзката между хеш-код и се равнява?
Обектите са равни, когато е равно и хеш-код се връща на същата стойност. Но това не е необходимо, че две различни предмети се връщат различни хеш кодове (това се нарича сблъсък).

7. Как прилаганите методи и хеш-код се равнява в клас Object?
Изпълнението на равен метод в класа на обекта се свежда до проверка за равенство на две връзки:

8. Какво се случва, ако не се отмени равенство императивни хеш-код? Какви проблеми могат да възникнат?
Те ще бъдат правилно съхранява в контейнери, като се използва хеш кодове, като HashMap, HashSet.

9. Имате ли някакви съвети за това какво трябва да се използва терена при изчисляване на хеш-код?
Има. Необходимо е да се използват по-добре уникални примитивни области като идентификатор, UUID, например. Освен това, ако тези области са включени в изчислението на хеш-код, е необходимо те да бъдат включени в изпълнението на равни.
Общи съвети: изберете областта, която до голяма dolyu вероятност ще се различават.

10. Смятате ли, че няма да има никакви проблеми, ако обектът, който се използва като ключов в поле HashMap промяна, която се занимава с определяне на хеш-код?
Воля. Отново има проблеми, свързани с колекциите хеш. А именно, че не можем да изберете елемент от колекцията на хеша, тя не изглежда да бъде.

11. Какви са модификатори за достъп в Java, знаеш ли?
Java, C ++ като наследник да наследи и модификатор за достъп от този език: обществен, частен защитен, и промяна на достъпа по подразбиране - това е, когато модификатора не е уточнено.

-Възможно ли е да се декларира клас с модификатор защитена?

От всичко това следва, че модификатора на пакет-частното е по-строг.

-Ние заявяваме, един клас с обществеността на модификатор, който създаде метод с модификатора по подразбиране. Дали този метод може да се види от другата pekedzhey?
-Дали програмата ще състави:
пакет ru.test;

-Възможно ли е да претовари методи по подразбиране?

13. Ако родителския клас е метод обявен за частни, ако наследникът може да разшири своята видимост? И ако защитени вас? Тясна видимост?
частни методи не един, а от класа им се не вижда. Ето защо, тяхното присъствие / отсъствие не се отразява в новия клас. Те лесно могат да декларират методи със същия подпис и всички модификатори. Но това е много лоша форма! Antipattern.
Като наследник на класа може да увеличи видимостта на защитен-метод. Такъв клас се нарича "Публично-Морозов" :). Поради факта, че както добре известен пионер sovetstkih, разкриват, на когото няма удряне! 🙂
Уточнете видимост получен клас не могат. Това ще бъде грешка компилация.

14. Какво означава финала на ключова дума?
В случай на клас - не могат да наследят от него.

В случай на метода - не можете да го замените. Това се използва, когато искате да укажете изрично "Не докосвайте тук! така че не е предназначен! ". Обикновено се подобрява структурата на системата. Но това трябва да се прави само ако има нужда. Не е нужно всички методи, определени като краен! Такива програмисти се наричат ​​"лошите гадатели". Преди това, тя все още е цел, че крайните методи работят по-бързо. Сега това е абсолютно не е вярно. Те работят с една и съща скорост! Така че ги използват само, когато изрично е необходимо.

15. Има ли смисъл да се декларира метод частен финала?
Само ако сте непоправим фаталист, финалист и песимист! 🙂

16. Какви са характеристиките на крайния инициализация на променливи?
Ако те не са декларирани като статични, те се инициализира в конструктора, дори и да е бил обявен не в нея. В този случай, кодът ще генерира компилатор. А по реда на тяхното инициализация съответства на реда на тяхното определяне.
Ако тя е обявена като статичен, след това или на първата покана за тази променлива, или когато за първи път се създаде обект от този клас. Т.е. създаването на статични променливи се случва "при поискване" и само веднъж. И това е много логично.

17. Какво се случва, ако само конструктора обявен за окончателен?
Грешка компилация.