clase imbricate statice
La ultima sesiune, ne-am întâlnit cu clasele imbricate de Java și, în special, cu clasele imbricate anonime. Cu toate acestea, nu am considerat tot ceea ce se referă la acest subiect. Un alt „subspecii“ clase imbricate - este clase imbricate statice. Ie în interior clasa Specificator poate fi static.
Statice interioare-clase sunt utilizate atunci când o clasă imbricate nu este necesară pentru a avea acces la câmpuri și metode de incorporare clasa non-statice. Faptul că clasele imbricate obiectele statice nu conțin referirea implicită la clasa OBJECT, pe care am discutat la ultima sesiune. Pe de altă parte, în generarea de statică interior-obiect-clasă nu are nevoie de clasa de obiecte de sex feminin. Prin urmare, un astfel de obiect de clasă poate fi generată fără probleme de metode statice sau deloc clasă îngrădire dintr-o altă clasă.
Pentru a fi mai precis, este o clasă statică, puteți aplica la câmpuri non-statice și metode de clasa de închidere, dar nu direct, ci printr-o referire la obiectul de clasă de îngrădire.
În acest exemplu, clasa descrisă Outer3 static interior clasa Inner3. În această clasă de f (.) Tipărituri Metoda incorporare câmp nume de clasă, dar pentru acest tip de parametru transmis Outer3 f (.). În clasă există o metodă statică Outer3 createInner (), care generează o clasă Inner3 obiect.
Noi oferim, de asemenea, exemple de creare a unei clase de obiecte în afara Inner3 clasa Outer3.
În toate celelalte clase imbricate statice sunt aceleași ca și non-statice.
Colectia de obiecte Java.
Familiarizarea cu biblioteca standard Java, vom începe cu o colecție de obiecte. Acestea sunt puse în aplicare de diferite clase ale pachetului java.util. Noi nu considerăm întregul pachet, dar numai clasele legate de colectarea, care, cu toate acestea, reprezintă o parte semnificativă a acesteia.
Ce este o colecție de obiecte. Este foarte puternic și extrem de instrument util. Cea mai simplă colectare este o matrice. Dar matrice are o serie de dezavantaje. Una dintre cele mai semnificative - dimensiunea matrice este fixat înainte de utilizarea acestuia. Ie trebuie să știm dinainte sau de a calcula cât de mult avem nevoie de o colecție de elemente pentru a începe cu ea. Acest lucru este adesea incomod, iar în unele cazuri - este imposibil.
Prin urmare, toate bibliotecile de bază moderne de diferite limbaje de programare au unele colecții versiune de suport de obiecte. Colecții au o caracteristică importantă - dimensiunea lor nu este limitată. Alocarea resurselor necesare pentru colectarea este ascunsă în clasa respectivă. Lucrul cu colecții facilitează și simplifică dezvoltarea de aplicații. Absența unui astfel de mecanism, ca parte a instrumentelor de dezvoltare cauzează probleme grave care conduc fie la diversele constrângeri în implementarea fie autodezvoltarea unor mijloace adecvate pentru depozitarea și procesarea fișierelor de date în avans de mărime incertă.
În instrumente Java pentru a lucra cu colecții de multe caracteristici plăcute și utile foarte dezvoltate și au care fac viața mai ușoară pentru dezvoltatori.
Începem studiul de colecții în Java cu un exemplu.
Una dintre clasele de colectare utilizate pe scară largă este ArrayList. Un exemplu de utilizare a acestei colecții este prezentată mai jos.
Luați în considerare acest exemplu mai detaliat. Aici, în plus față de o clasă ArrayList, am folosit un număr de clase Java bibilioteki.
- Aleatoare - clasa java.util. clasă de matematică extinde capacitățile de generare de numere aleatoare (cm.) de documentare.
- Integer - așa-numitul înveliș-clasa (clasa wrapper) pentru întreg (int). Este folosit pentru că este imposibil să se plaseze în colectarea de date de tipuri primitive, ci doar obiecte din clase.
Clasa ArrayListTest are două câmpuri - câmp de clasă LST și generatorul de clasa ArrayList câmp aleatoare, utilizate pentru generarea de numere aleatoare. addRandom () metoda generează și stochează o colecție de un alt număr aleator. toString (), metoda se referă la o clasă de ArrayList metoda toString (), care asigură formarea unei listei de vizualizare într-un șir de caractere.
Metoda principală (). ArrayListTest obiect de clasă creează și organizează ciclul de 100 generat un număr aleatoriu care trebuie introduse în colecția lor, provocând addRandom metoda (). După aceea, se imprimă rezultatul.
Ottransliruem și rula acest program.
Acest exemplu nu prezintă avantaje special de colectare, ci doar o tehnică de utilizare a acestora. Se poate observa că pentru a adăuga un element la metoda de colectare se poate adăuga (.) Clasa ArrayList și, în același timp, nu am specificați dimensiunea colecției.
Luați în considerare o colecție de mai sistematic.
Să vedem documentația. Java.util definite interfețe:
Aceste interfețe formează baza pentru construirea unei colecții de clasă Java.
- Listă - o listă de obiecte. Obiectele pot fi adăugate la lista (metoda de add ()), înlocuit în lista (setul metoda ()), eliminată din lista (remove () metoda), extract (metoda get ()). Există, de asemenea, posibilitatea de a organiza trecerea listei folosind un iterator.
- Set - un set de obiecte. Aceleași caracteristici ca și cea a listei, dar obiectul poate fi inclus în multe o dată. Ie dublu adăugarea de unul și același obiect din set nu se schimba setul în sine.
- Harta - o hartă sau un tablou asociativ. Harta, nu vom adăuga obiecte individuale, și o pereche de obiecte (cheie, valoare). Prin urmare, există o operațiune de căutare pe valoarea cheii. Adăugarea unei perechi cu o cheie existentă în Harta duce la înlocuirea, nu pentru a adăuga. Din afișajul (Map) poate primi o cheie de pluralitate (Set) și o listă de valori (listă).
Colectia - un set de obiecte arbitrare
O trăsătură comună a colecțiilor este că acestea sunt de lucru cu obiect (clasa de bază pentru toate clasele Java). Acest lucru înseamnă că putem adăuga la colecția de obiecte Java, cum Obiectul este clasa de baza pentru toate clasele Java. La scoaterea din colecția, vom obține, de asemenea, obiectul. De multe ori, acest lucru duce la necesitatea de a transforma primite de la obiectul de colectare la clasa dorită (downcasting).
Este foarte convenabil pentru realizarea colecțiilor în sine, dar nu întotdeauna bun la programare. Dacă vom face o colecție de obiecte de clasa A și ca urmare a unei erori pentru a pune obiectul de clasa B, atunci când programul vom obține un ClassCastException atunci când încercați pentru a converti extras din elementul de colectare la clasa A (și apoi vom căuta o lungă perioadă de timp, în cazul în care este bug-ul).
Opțiunea ideală este, în primul rând, pentru a primi un mesaj de eroare la punctul de origine, mai degrabă decât la punctul de manifestările sale, și, pe de altă parte, în timpul difuzării programului, și nu atunci când este executat.
Prin urmare, în multe cazuri, este mai bine să se bazeze pe baza clasei pentru a sprijini colectarea clasei sale, care va oferi tipul dorit de verificare la momentul compilarii. De exemplu, să presupunem că vrem o listă de obiecte MyType de clasă și am decis să-l utilizați pentru construirea unei ArrayList standard de clasă (a se vedea. Documentația). Apoi, puteți crea o clasă de ajutor MyList ca aceasta:
Clasa MyList este bine că o astfel de listă nu poate adăuga nimic, cu excepția MyType tip de obiect, iar lecțiile din lista de obiecte dintr-o dată redusă la tipul MyType în interiorul unei metode get ().
Retreat. Acest exemplu este interesant altul. Aceasta demonstrează cazul în care în loc să moștenească agregarea ar trebui să se aplice. Într-adevăr, dacă am fi moștenit de la un ArrayList, ei ar fi rămas metodele disponibile ale unui ArrayList, care operează cu obiect, și nu cu MyType și nu ar avea efectul dorit.
Colecțiile sunt iteratori utilizate pe scară largă. În Java, un iterator - un obiect de ajutor, care este folosit pentru a itera peste o colecție de obiecte. Așa cum sunt colecțiile, iteratorii se bazează pe interfața. Această interfață Iterator. definite în pachetul java.util (A se vedea informațiile furnizate). Ie orice iterator, ca și cum nu ar fi fost aranjat, următoarele trei metode:
- boolean hasNext () - verifică dacă există mai multe elemente în colecția
- Obiectul următor () - oferă un alt element de colectare
- void remove () - șterge ultimul element selectat din colecția.
În plus, există Iteratorul ListIterator - este o versiune extinsă a iteratorului pentru a adăuga. oportunități și Recenzorul - este o opțiune învechită din stânga pentru compatibilitate cu versiunile anterioare.
Interfața de colectare are o metodă, la rândul său,
Se cuvine ca toate clasele de colectare pentru a crea suport pentru iteratorii (pus în aplicare în mod obișnuit, folosind interioare-clase care îndeplinesc interfața Iterator).
Să considerăm acum interfața List. În plus față de metoda iterator (), are o metodă
În consecință, toate colectarea de liste Lista de implementat iteratori.
Revenind la exemplul o colecție de 100 de numere aleatoare la începutul sesiunii. Este rău că linia care reprezintă numerele aleatoare nu sunt formatate, iar rezultatul nu arata ușor de citit. Am stabilit noi înșine sarcina de a rupe șirul de șir, astfel încât fiecare dintre ele nu conține mai mult de 6 cifre.
Pentru a face acest lucru, avem nevoie doar rescrie metoda toString ().
A făcut aceste schimbări, ottransliruem și rulați programul. Acum, numărul afișat într-o formă mai ușor de citit.
Să analizăm modul în care este pusă în aplicare toString) metoda (. iterator () returneaza un obiect al ArrayList, o referire la care depozitam în variabila ITER. Acest obiect nu este iterator interfață (este imposibil de a construi un obiect de interfață). Este un obiect al unei clase definite în interiorul unui ArrayList, satisfăcând interfata Iterator. Această clasă are un nume, câmpul poate avea unele metode-private. Dar noi nu suntem interesați. Noi doar da la tipul Iteratorul și modul de utilizare a unui iterator.
- Cel mai adesea, aceste clase sunt construite folosind mecanismul de clase imbricate.
- Acest exemplu, printre altele, arată cazul în care nu este necesar pentru a efectua o distributie dupa preluarea unui obiect din colecție.
Extras din colecția de obiect următor (), nu dau la tipul Integer, și se aplică imediat metoda toString (). Aici vom folosi proprietatea că toate clasele au o metoda toString () (așa cum este în obiect).
Metoda de eliminare () este definită interfață Iterator. Acesta vă permite să eliminați din colecția ultimei recuperate de la obiectul ei. În același timp, în interfața de colectare (ceea ce înseamnă că - în toate clasele de colecții), există metode de a elimina (Object o) și removeAll ().
Nu există oportunități de dualitate. Faptul este că îndepărtarea dintr-o colecție de obiecte și toate modificarea colecției în paralel cu trecerea colecției printr-un iterator este interzisă (ConcurrentModificationException emise). Singurul lucru care este permis - este de a elimina elimina obiect () metoda de Iterator (si numai unul - ultimul extras).
Interfața ListIterator extinde aceste caracteristici (a se vedea. Setul Metoda (Object o) interfața ListIterator).
Clase de punere în aplicare colecții
Luați în considerare implementări specifice ale colecțiilor, și anume clase care asigură funcționalitatea descrisă mai sus. Le vom lua în considerare în contextul acelorași tipuri de colecții - List, Set, Harta.
Lista de colecții (Lista)
Pus în aplicare în următoarele trei exemple de realizare ArrayList, LinkedList, Vector.
- Clasa Vector - o opțiune învechită din stânga pentru compatibilitate cu versiunile anterioare.
Clasa ArrayList - cel mai des utilizate. Ea are doi constructori:
Precum și următoarele metode:
Ea are practic aceeași funcționalitate ca un ArrayList, și diferă de la ea doar în modul de punere în aplicare și, în consecință, punerea în aplicare efectivă a anumitor operațiuni. Deci, adăugarea unui LinkedList efectuat, în medie, mai repede decât într-un ArrayList, trece secvențial prin listă este aproape la fel de eficace ca cea a unui ArrayList, precum și eliminarea arbitrară din lista de mai lent decât ArrayList.
Familiarizarea cu alte tipuri de colecții, vom continua la următoarea lecție.
lucrări practice
Să ne întoarcem la clasa a 9-temele. Corectați realizarea ei arată.
1. Pentru a face față componentelor vizuale folosite panou aici 3 - pnlin, pnlout și pnlBtn. Asta este ceea ce oferă aspectul normal al cererii.
După aceea, curățarea câmpului de intrare:
Schimbarea cererea este după cum urmează.
- 1. În cazul în care copiați câmpurile de care aveți nevoie în afară de copia reală de a asigura linia de intrare a câmpului de intrare în lista internă (listare folosind ArrayList sau LinkedList).
- 2. Adăugați o mai jos pe butonul ecranului etichetat „Print“. Prin apăsarea acestui buton toate lista salvate pentru a fi imprimate (în fluxul System.out).