1. Pachete
Programele Java obișnuite implică un număr enorm de clase. Câți? Mii, zeci de mii. Și dacă luați în considerare și faptul că programul folosește diverse biblioteci care conțin clase scrise de alți programatori, atunci numărul de clase poate fi ușor măsurat în milioane!
Ar fi aproape imposibil să venim cu nume unice pentru toate aceste milioane, sau chiar doar mii, de clase.
Desigur, ne putem imagina nume precum A123
și B345
, dar dacă vorbim despre alegerea unui nume de clasă bun, unul care să faciliteze înțelegerea clasei (cum ar fi String
pentru șiruri, de exemplu), atunci chiar și a genera o mie de nume unice este mult a muncii.
De aceea, în Java se obișnuiește gruparea claselor în pachete folosind cuvântul cheie package.
Clasele Java și pachetele lor sunt foarte asemănătoare cu fișierele și folderele de pe un computer.
De exemplu, dacă trebuie să stocați 10 documente pe computer, probabil le-ați păstra într-un singur folder. Dar dacă aveți mii de documente (de exemplu, un depozit al tuturor documentelor unei companii)?
Având mii de documente de stocat, o soluție este de a crea mai multe niveluri de foldere cu nume descriptive bune. Și apoi într-un folder de la ultimul nivel, stocați documentele care se referă la acel folder anume. Nici numele descriptive bune pentru documente nu strica.
De fapt, facem toate acestea pentru clase în Java.
Fișierele care conțin clasele sunt stocate în diferite directoare (foldere), iar numele complet al folderului clasei cu toate subfolderele sale este numele pachetului. Exemplu:
Calea către fișier | Numele pachetului | Numele clasei |
---|---|---|
|
|
|
|
|
|
|
|
|
Spre deosebire de numele folderelor, numele pachetelor folosesc un punct ca delimitator. Cu alte cuvinte, folderul \com\codegym\tasks\
corespunde pachetului com.codegym.tasks
.
2. src
dosar
În Java, se obișnuiește să stocați toate clasele pentru un program într-un singur folder (și subdirectoare). Acest folder este de obicei numit src
(prescurtare de la sursă ).
Acest folder se numește rădăcină de proiect (sau rădăcină sursă ) și toate căile de pachet sunt relative la acesta. Exemple:
Foldere | Numele pachetului |
---|---|
|
|
|
|
În această situație, programatorii spun ceva de genul „avem un proiect numit my
, care se află în c:\projects\data
folder” sau „avem un proiect numit project
, care se află în d:\files\git\data
folder”
Cel mai bine este să puneți întotdeauna clase în pachete și nu direct în folderul rădăcină ( src
. Dacă aveți doar câteva clase, acest lucru nu prezintă nicio problemă. Dar când sunt multe clase, este foarte ușor să vă confundați. Deci , creați-vă întotdeauna clasele numai în pachete.
În Java, se obișnuiește să se dea nume semnificative claselor și pachetelor. Multe companii își lansează propriile biblioteci (un set de clase) și, pentru a evita confuziile, încorporează numele companiei/site-ului/proiectului în numele pachetului:
Numele pachetului | Numele companiei/proiectului |
---|---|
|
Proiectul Apache |
|
Compania Oracle |
|
Compania Oracle, proiect Java |
|
Compania IBM, proiect WebSphere |
|
Proiectul JBoss |
3. Conținutul fișierului
Conform standardului limbajului Java, informațiile despre numele unei clase și numele pachetului acesteia trebuie incluse în fișierul cu codul. Forma generală este prezentată mai jos:
package package-name;
public class ClassName
{
}
Numele pachetului trebuie să se potrivească cu numele folderului, iar numele fișierului trebuie să se potrivească cu numele clasei publice.
Dacă aveți un fișier, atunci acesta ar trebui să conțină acest lucru:...\src\com\project\Service.java
package com.project;
public class Service
{
}
4. Importul claselor
Numele clasei și numele pachetului formează ceea ce se numește numele complet calificat al clasei .
Exemple:
Nume complet calificat | Numele pachetului | Numele clasei |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
nici unul |
|
Veștile bune:
Numele de clasă complet calificat este întotdeauna unic în cadrul unui proiect. La urma urmei, nu puteți crea două fișiere cu același nume într-un singur folder.
Vestea proastă:
Numele de clasă complet calificate sunt de obicei lungi sau foarte lungi. Și scrierea unui nume lung (de exemplu, java.util.ArrayList) de fiecare dată în cod este super incomod.
De aceea, Java a adăugat capacitatea de a importa clase .
Puteți utiliza numele scurt al unei clase în codul dvs., dar mai întâi trebuie să informați compilatorul care nume de clasă complet calificat corespunde numelui scurt . Ce se întâmplă dacă acum ai mai multe clase cu același nume în proiectul tău? Sau ai inițial unul, dar apoi au fost adăugate încă 15...
Pentru a utiliza un nume scurt de clasă în codul dvs., trebuie să adăugați următorul construct:
import fully-qualified-class-name;
Această declarație trebuie adăugată chiar la începutul orei, imediat după package
declarație.
Exemplu:
package com.codegym.tasks.task01;
import java.util.Scanner;
import com.test.helper.special.ArrayList;
public class Solution
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
ArrayList list = new ArrayList();
}
}
Am importat două clase ( java.util.Scanner
și com.test.helper.special.ArrayList
), astfel încât să putem folosi numele lor scurte în codul nostru. Și compilatorul va ști ce clase să folosească.
Și iată cum ar arăta același cod dacă nu am fi folosit import
:
package com.codegym.tasks.task01;
public class Solution
{
public static void main(String[] args)
{
java.util.Scanner console = new java.util.Scanner(System.in);
com.test.helper.special.ArrayList list = new com.test.helper.special.ArrayList();
}
}
Apropo, dacă proiectul tău are două clase numite Scanner
, nu le vei putea importa pe ambele în același fișier: va trebui să folosești numele lung pentru una dintre ele.
Să presupunem că ai un Jen în echipa ta. Nu există probleme de comunicare, deoarece toată lumea știe cine este. Dar dacă ar exista trei Jen, atunci ar trebui folosite nume complet calificate pentru a le distinge.
Apropo, dacă ești prea leneș să adaugi o mulțime de instrucțiuni de import în clasa ta, poți folosi versiunea leneșă a acesteia: în loc de un anumit nume de clasă, pune un asterisc:
import package-name.*;
Acest lucru vă va permite să utilizați numele scurte ale tuturor claselor din pachet.
Toate clasele din java.lang
pachet sunt importate automat, deci nu trebuie să scrieți o import
declarație pentru ele. Cu siguranță știți deja una dintre aceste clase: java.lang.String
. Da, așa e. Aceasta este String
clasa pe care am folosit-o pentru a lucra cu șiruri.
GO TO FULL VERSION