Care este diferența dintre final și static în Java?


Cel mai bun răspuns

Uh, sunt concepte complet diferite.

Un membru a marcat static aparține clasei, mai degrabă decât oricărei instanțe particulare. Uneori, clasele ar putea avea doar membri statici, un exemplu evident fiind clasa java.lang.Double care „cutează” primitive duble: s-ar putea obține valoarea unui dublu individual printr-o metodă de instanță (myDouble.doubleValue()) dar obțineți lucruri „universale” prin membrii statici (Double.MAX\_VALUE).

Un membru marcat ca final nu poate * avea valoarea sa (care este valoarea sa dacă este primitiv sau referința dacă obiect) s-a schimbat odată inițializat. Este posibil să puteți schimba în continuare proprietățile unui obiect (poate fi modificabil ) dar nu ai putut * înlocui obiectul cu altul. (* Puteți „trișa” din punct de vedere tehnic cu reflecție, manipularea codurilor bytec sau alte modalități de „încălcare a regulilor”, dar dacă faceți acelea, probabil vă cunoașteți re „înșelăciune”.)

Răspuns

Să știi când să folosești

private static final X x;

Ar trebui să știți la ce folosește acele cuvinte cheie.

Să vedem

  1. private – Se folosește atunci când doriți să restricționați anumiți membri ai unei clase la să nu fie accesibil în afara acelei clase.
  2. static – Când declarați orice membru static, acesta este legat de clasa sa și nu obiect. Pentru a-l simplifica, membrul static va fi inițializat la încărcarea clasei. Deci, ori de câte ori actualizați valoarea acelui membru, toate locurile în care este menționat vor fi, de asemenea, actualizate. Prin urmare, membrul static este accesat prin numele clasei și nu obiectele lor, deoarece valoarea membrului va rămâne aceeași, indiferent de obiecte. >
  3. final – Acest cuvânt cheie, atunci când este utilizat cu variabile membre, definește că, odată ce clasa este încărcată și valoarea este atribuită, nu poate fi modificată.

Deci, să vedem ce se întâmplă când declarați o variabilă ca mai jos:

private static final String PRIVATE\_STATIC\_FINAL\_STRING = "String";

Acum,

PRIVATE\_STATIC\_FINAL\_STRING este definit privat, așa că a câștigat „Nu fi accesibil în afara clasei declaratoare”. De asemenea, este definit ca static, deci valoarea acestuia va rămâne aceeași indiferent de obiectele clasei sale. Și este definită ca finală, deci odată încărcată clasa, valoarea sa nu va fi modificată.

Prin urmare, PRIVATE\_STATIC\_FINAL\_STRING va funcționa ca șir de nivel de clasă nemodificabil, care nu va fi accesibil în afara clasei declaratoare.

Sper că acest lucru vă va ajuta să vă îndepărtați îndoielile. Dacă aveți nevoie de ajutor suplimentar, puteți ajunge la mine și voi încerca să vă ajut cât de mult pot.

Noroc și învățare fericită!

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *