Bună ziua tuturor. Astăzi ne uităm la modificatori în Java.
Modifier - un cuvânt cheie limbă, care se poate schimba în vreun fel sensul unora dintre definițiile (de exemplu, de clasă sau metodă). Dintre toți modificatorii aloca separat grup modificatorii de acces:
- publice;
- protejate;
- Modificatorul implicit - este numit pachet;
- privat.
Despre modificatorii de acces, voi scrie în detaliu în articolul despre OOP în Java. Și chiar acum acesta este planul:
Modificatorii clase (modificatori de clasă)
Modificatorul abstract. aplicata la clasa, a declarat că clasa este (sau este considerată a) incompletă și referirea la „complet“ clasa este atribuită moștenitorilor. O încercare de a instantia o astfel de clasă va avea ca rezultat o eroare de compilare-timp, cum ar fi:
Compilarea acest cod va primi o eroare: expresie este abstractă; Nu pot fi instanțiat.
Notă din clasa abstractă nu trebuie neapărat să fie metodele abstracte.
Modificatorul final din clasa a spus că nu poți moșteni de la el.
Incercarea de a compila rezultatele de cod într-o eroare: nu poate moșteni din exemplul final.
Evident, clasa nu poate fi declarată atât finală și abstract.
clase imbricate în Java pot fi declarate ca fiind statice. de exemplu:
În acest caz, clasa se numește clasă imbricată statică și are acces la câmpuri și metode de încadrare clasa statice.
Metode de modificatori (modificatori metodă)
Cu metodele de opțiuni un pic mai mult. Metode în Java pot fi declarate ca fiind abstracte finală statică, strictfp,, (a se vedea sfârșitul articolului), nativ, sincronizate.
Metoda modificator abstract poate fi declarată ca metodă de membru (metoda membru) într-o clasă abstractă (sau interfață). În acest caz, corpul metodei este absent, iar punerea în aplicare pot fi furnizate într-o clasă derivată. Dacă metoda este declarată ca abstractă într-o anumită clasă, veți obține o eroare de compilare.
Metodele declarate cu modificatorul final nu poate fi înlocuită în descendenții.
În exemplu, apare o eroare la compilare: a () în Clazz.SubClass nu poate trece peste () în Clazz; Metoda supracomandată este definitivă
Metoda cu modificatorul static aparține clasei ca întreg și nu la instanțele sale, adică, nu este transferat la obiectul prezentului. Această metodă poate fi invocată folosind numele clasei. De exemplu:
În cele din urmă, modificatorul sincronizat în metoda spune că înainte de executarea lui ar trebui să fie capturat monitorului obiect (pentru o metodă non-statică) sau un monitor asociat cu clasa (pentru o metodă statică).
Iată un exemplu de cod care demonstrează descrierea metodelor sincronizate. Surprinde monitorul, precum și prin utilizarea cuvântului cheie sincronizate.
câmpurile modificatori (modificatori de câmp)
Să ne întoarcem la domeniile de clase. Ele pot fi descrise astfel de modificatori ca statică finală, tranzitorii, volatile.
Dacă un câmp de clasă declarată ca statică. atunci va fi exact o valoare a acestui domeniu, indiferent de modul în care vor fi create mai multe instanțe ale clasei, chiar dacă nu a creat un singur exemplar. Aceste câmpuri sunt numite statice nivel variabile ale clasei (variabila de clasă).
Câmp cu modificator final nu se poate schimba valoarea dupa inițializare. Acest lucru este valabil atât pentru câmpuri statice și non-statice (câmpuri membre).
Compilarea acest cod va cauza o eroare: nu se poate atribui o valoare constantă variabilă finală.
Pentru a indica faptul că, în timpul serializarea obiectului pentru un câmp să fie ignorate, utilizați modificatorul tranzitorie. De obicei, aceste câmpuri nu fac parte din starea internă a obiectului sau valori intermediare stocate.
Cu toate modificator volatil un pic mai complicat. Încerc să explic mai ușor. În Java fire pot stoca valori ale unor variabile, în unele contextul local. În cazul în care un fir schimbă valoarea unui astfel de câmp, apoi un alt fir nu poate ști despre ea (pentru că păstrează o copie). Pentru câmpurile cu modificator volatil este o garanție că toate firele vor vedea întotdeauna valoarea curentă a unei variabile.
Modificatorii asociate cu interfețe
Interfața poate aplica aceleași modificatorii ca și clasele, cu excepția desigur finale. Interfața este abstract în mod implicit. În cazul interfeței imbricate cuvinte cheie statică poate fi omisă - este, în orice caz, va fi statice.
Metodele de interfață sunt umlochaniyu sunt abstracte publice, astfel încât să-i nu se aplică modificatori finală, static și nativ. Sincronizat, de asemenea, ele nu pot fi, pentru că interfața nu poate fi instantiata.
interfață implicită Câmpurile este finală un public static, și, prin urmare, trebuie să fie inițializată.
Pentru a rezuma, următoarele două bucăți de cod sunt identice:
Ei bine, implicit - cele mai recente de dezvoltare în domeniul modificatori :). Metoda de interfață care este marcat ca implicit, prevede o punere în aplicare a metodei implicite. De exemplu:
Acest cod compilează fără erori în Java versiunea 1.8.
Alte contexte de utilizare modificatori
Există două opțiuni, în cazul în care pot fi utilizate modificatori.
Prima opțiune - este variabilele locale care pot fi declarate ca fiind finale. În acest caz, valoarea variabilei nu poate fi schimbată în cadrul metodei după inițializare
A doua opțiune - este un bloc de inițializare statică, care este executat atunci când este încărcat clasa:
În cele din urmă, ne întoarcem la MODIFIER strictfp. modificator strictfp pentru punctele de clasă și interfață pentru faptul că toate metodele de clasă / interfață va strictfp. Dar dacă metoda este descrisă ca strictfp (explicit sau implicit), atunci JVM garantează că rezultatele expresiilor de calcul, și float dublă în cadrul metodei va fi la fel pe toate platformele.
Acest modificator a fost introdus în versiunea de Java 1.2. Dar acum toate compilatoarele moderne și-au mărit în jos acest modificator, astfel încât privind portabilitatea programelor dumneavoastră poate fi calm.