interviu java

Java Interviu. Întrebări și răspunsuri

1. Care este obiectul de clasă? Ce are metode?
Obiectul este clasa de bază pentru toate celelalte obiecte în Java. Fiecare clasă moștenește de la obiect. În consecință, toate clasele moștenesc metodele de clasa Object.
Metode de clasa Object:

  • Clasa publică nativă finală getClass ()
  • hashCode publice int nativ ()
  • public boolean este egal cu (Object obj)
  • clona obiect nativ protejat () aruncă CloneNotSupportedException
  • toString public String ()
  • void nativ finală publică notifică ()
  • notifyAll nativ finală public void ()
  • final publicul void nativ așteptare (timeout lung) aruncă InterruptedException
  • publice de așteptare finală void (timeout lung, int Nanos) aruncă InterruptedException
  • void finală publică așteptare () aruncă InterruptedException
  • void protejat finalize () aruncă Dispensabil

Notă: Se poate spune că există o altă metodă statică registerNatives nule native particulare () Pentru a finaliza revizuirea.

2. Ce este () metoda egali. Cum este diferit de operația ==.
este egal cu (), metoda este raportul de echivalență a obiectelor. Echivalent este raportul care este simetrică, tranzitivă și reflexiv.

  • Reflexivitatea: pentru orice x nenul, x.equals (x) return true;
  • Tranzitivitate: pentru orice nenul x, y și z, dacă x.equals (y) și y.eqals (z) returnează true, atunci x.equals (z) return true;
  • Simetria: pentru orice x și y nenul, x.equals (y) ar trebui să se întoarcă adevărat, dacă și numai dacă, kogday.equals (x) returneaza true.

De asemenea, pentru orice x nenul. x.equals (null) ar trebui să se întoarcă false.
Diferențele între egali () privind funcționarea == din clasa Object nr. Acest lucru este evident atunci când se uită la codul sursă al metodei este egal cu Obiectul de clasă:

equals publice boolean (Object obj) retur (acest == obj);
>

Cu toate acestea, nu trebuie să uităm că, în cazul în care obiectul sau nu abordează (nul), atunci apelul metodei este egal cu obiectul va duce la o NullPointerException. De asemenea, amintiți-vă că atunci când se compară două obiecte poate fi nulă și operarea obj1 == obj2 în acest caz este adevărat, iar apelul este egal va avea ca rezultat un NullPointerException.
După cum putem vedea, cu ajutorul chirurgiei == compară referirile la obiecte. Dar putem trece peste metoda este egală, stabilind astfel logica compararea a două obiecte. De exemplu, ia în considerare compararea a două numere identice create folosind clasa Integer:

Dacă te uiți în interiorul metoda equals de clasa Integer, vom vedea:

Este clar că aici nu există nici o comparație a referințelor, și compară valorile int.

3. Dacă doriți să înlocuiți (egali), ce condiții trebuie îndeplinite pentru o metodă supracomandată?
Aceste condiții sunt enumerate la punctul 2.

4. Dacă equals () rescrisă în cazul în care există alte metode care ar trebui să fie suprascrise?
Da, est.Nuzhno suprascrie metoda hashCode (). obiecte Egale trebuie să returneze același cod hash. De exemplu, la metoda din clasa Integer hashCode () este redefinit după cum urmează:

Valoarea de retur int hashCode publice ();
>

Valoarea este valoarea privată, care deține clasa obiect Integer. De fapt, acesta este numărul.

5. Care este hashCode) metoda (?
Pentru a începe, să ne amintim că acest hash și hash. Acum amintesc cunoscute clase, cum ar fi HashMap, HashSet, Hashtable, care se bazează pe calcularea funcției hash. Este prin hash putem insera și prelua date în O (1), adică, în timpul calculului proporțional al funcției hash.
De exemplu, ia în considerare introducerea de elemente într-un HashMap:

pune V publice (K-cheie, valoarea V) ...
int hash = hash (key.hashCode ());
int i = indexFor (hash, table.length);
...
AddEntry (hash, cheie, valoare, i);
...
>

După cum putem vedea, i-a insera un obiect se calculează folosind hash. Și avem nevoie pentru a calcula o funcție hash bun, pentru a da o distribuție chiar și mai puține coliziuni.
Acesta este răspunsul la întrebarea constă în faptul că există colectare (HashMap, HashSet), care utilizează codul hash ca bază pentru lucrul cu obiecte. Și dacă hash pentru obiecte egale vor fi diferite în HashMap sunt două valori egale, că este o greșeală. Prin urmare, mod adecvat trebuie să suprascrie metoda hashCode ().

6. Care este relația dintre hashCode și este egal?
Obiecte egal atunci când egali și hashCode returnează aceeași valoare. Dar nu este necesar ca două obiecte diferite a reveni diferite coduri hash (aceasta se numește o coliziune).

7. Cum metodele implementate și hashCode este egal în clasa Object?
Punerea în aplicare a metodei în clasa egalilor obiect este redusă la verificarea pentru egalitatea de două link-uri:

8. Ce se întâmplă dacă nu trece peste egali hashCode imperative? Ce probleme pot apărea?
Acestea vor fi depozitate în mod corespunzător în containere, folosind coduri hash, cum ar fi HashMap, HashSet.

9. vreun sfat acolo despre ce domeniu ar trebui să fie utilizat la calcularea hashCode?
Acolo. Este necesar să se utilizeze mai bine domenii unice primitive, cum ar fi ID-ul, UUID, de exemplu. Mai mult decât atât, în cazul în care aceste domenii sunt implicate în calculul hashCode, este necesar să le implice în îndeplinirea egali.
Indicații generale: alege domeniu, care să o probabilitate dolyu mare va varia.

10. Credeți că vor exista probleme în cazul în care obiectul este folosit ca o cheie în domeniul schimbărilor HashMap, care este implicată în determinarea hashCode?
Will. Din nou, există probleme asociate cu colecțiile hash. Și anume, nu putem selecta un articol din colecția hash, nu părea să fie.

11. Care sunt Modificatorii de acces în Java, știi?
Java, C ++ ca moștenitorul să moștenească și Modificatorul de acces la această limbă: public, privat, protejat, și modificarea accesului implicit - acest lucru este atunci când modificatorul nu este specificat.

-Este posibil să declare o clasă cu modificatorul protejat?

Din toate acestea rezultă că modificatorul-pachet privat este mai riguros.

-Noi declarăm o clasă cu publicul modificator, care creează o metodă cu modificatorul implicit. Dacă această metodă poate fi văzută din alte pekedzhey?
-Are programul va compila:
ru.test pachet;

-Este posibil să supraîncărcați metodele implicite?

13. În cazul în care clasa părinte are o metodă declarată ca fiind private, în cazul în care moștenitorul poate extinde vizibilitatea? Și dacă ai protejat? O vizibilitate îngustă?
Metodele private nici una dar clasa in sine nu vede. Prin urmare, prezența lor / absența nu afectează clasa derivată. Ele pot declara cu ușurință metode cu aceeași semnătură și orice modificatori. Dar este forma foarte rău! Antipattern.
Deoarece moștenitorul clasei poate extinde vizibilitatea metodă protejată. O astfel de clasă este numit „Public-Morozov“ :). Datorită faptului că, în calitate de sovetstkih pionier bine-cunoscut, dezvăluie la care nici un lovirea! 🙂
Rafinare clasa de vizibilitate derivată nu se poate. Va fi o eroare de compilare.

14. Ce finală a cuvintelor cheie?
În cazul clasei - nu poate moșteni de la el.

În cazul metodei - nu se poate trece peste. Acesta este utilizat atunci când doriți să specificați în mod explicit „nu atingeți aici! așa că nu este destinat!“. De obicei, îmbunătățește arhitectura sistemului. Dar ar trebui să se facă numai în cazul în care este nevoie. Nu aveți nevoie de toate metodele definite ca fiind finale! Astfel de programatori sunt numite „profetiile apocaliptice“. Anterior, a fost încă o vedere că metodele finale de lucru mai rapid. Acum este absolut nu este adevărat. Ei lucrează cu aceeași viteză! Deci, le folosesc numai atunci când este necesar în mod explicit.

15. Are sens să declare finala privată metoda?
Numai dacă sunteți un fatalist inveterat, finalist și un pesimist! 🙂

16. Care sunt caracteristicile de initializare finală a variabilelor?
În cazul în care nu sunt declarate ca statice, acestea sunt inițializate în constructor, chiar dacă a fost declarată nu în ea. În acest caz, codul va genera un compilator. Și ordinea inițializarea lor corespunde cu ordinea definiției lor.
În cazul în care este declarată ca statică, atunci fie primul apel la această variabilă, fie atunci când creați mai întâi un obiect al acestei clase. Și anume crearea de variabile statice se întâmplă „la cerere“ și doar o singură dată. Și este foarte logic.

17. Ce se întâmplă dacă singurul constructor declarat finală?
Greșeala de compilare.