numelePachetului.NumeleClasei:
java.util.Stack s1 = new java.util.Stack();
my_package.Stack s2 = new my_package.Stack();
Ce se īntāmpla īnsa cānd doi programatori care lucreaza la un proiect comun folosesc clase cu
acelasi nume ce se gasesc īn pachete cu acelasi nume ?
Pentru a evita acest lucru companiile folosesc inversul domeniului lor Internet īn denumirea
pachetelor implementate īn cadrul companiei, cum ar fi com.company.numePachet.
In cadrul unei aceeasi companii conflictele de nume trebuie rezolvate prin diverse conventii
de uz intern.De exemplu, adresa mea de e-mail este acf@infoiasi.ro, ceea ce īnseamna
ca domeniul meu Internet este infoiasi.ro. Pachetele create de mine ar trebui denumite
ro.infoiasi.NumePachet. Pentru a rezolva conflicte cu alti programatori din acelasi
domeniu cu mine pachetele s-ar putea numi: ro.infoiasi.acf.NumePachet.
Folosirea membrilor unui pachet
Conform specificatiilor de acces ale unei clase si ale mebrilor ei doar clasele publice si
membrii declarati publici ai unei clase sunt accesibili īn afara pachetului īn care acestea
se gasesc.
(vezi "Specificatori de acces pentru membrii unei clase")
Pentru a folosi o clasa publica dintr-un pachet sau pentru a apela o metoda publica a unei
clase public a unui pachet exista trei solutii:
- specificarea numelui complet al clasei
- importul clasei respective
- importul īntregului pachet īn care se gaseste clasa
Specificarea numelui complet al calsei se face, asa cum am vazut, prin prefixarea numelui clasei
cu numele pachetului: numePachet.NumeClasa. Aceasta metoda este recomandata doar pentru
cazul īn care folosirea acelei clase se face o singura data sau foarte rar.
De exemplu ar fi extrem de neplacut sa scriem de fiecare data cānd vrem sa declaram un sir de
caractere sau sa folosim un obiect grafic secvete de genul;
java.lang.String s = "neplacut";
java.awt.Rectangle r = new java.awt.Rectangle();
java.awt.Circle c = new java.awt.Circle();
In aceste situatii vom importa (include) clasa respective sau īntreg pachet din care face parte
in aplicatia noastra. Acest lucru se realizeaza prin instructiunea import,
care trebuie sa apara la īnceputul fisierelor sursa, imediat dupa instructiunea package.
Importul unei clase sau interfete
Se face printr-o instructiune import īn care specificam numele clasei (interfetei) pe care
dorim sa o folosim dintr-un pachet:
import java.awt.Rectangle;
Din acest moment vom putea folosi īn clasele fisierului īn care am plasat instructiunea de
import numele scurt al clasei Rectangle
Rectangle r = new Rectangle(0,0,100,100);
Aceasta abordare este eficienta īn cazul īn care nu avem nevoie decāt de acea clasa sau doar
de cāteva clase din pachetul respectiv. Daca īn exemplul nostru am avea nevoie si de clasele
Circle, Line, Point, Polygon ar trebui sa avem cāte o instructiune de import pentru
fiecare dintre ele:
import java.awt.Rectangle;
import java.awt.Circle;
import java.awt.Line;
import java.awt.Point;
import java.awt.Polygon;
In aceasta situatie ar fi recomandat importul īntregului pachet si nu al fiecarei clase īn parte.
Importul unui pachet (importul la cerere)
Se face printr-o instructiune import īn care specificam numele pachetului ale carui clase si
interfete dorim sa le folosim dintr-un pachet, urmat de simbolul '*'.
Se mai numeste import la cerere deoarece īncarcarea claselor se face dinamic īn momentul
apelarii lor. Este cel mai uzual tip de import.
import java.awt.*;
Din acest moment vom putea folosi īn clasele fisierului īn care am plasat instructiunea de
import numele scurt al tuturor claselor pachetului importat:
Rectangle r = new Rectangle();
Circle c = new Circle(); ...
- Atentie
- * nu are semnificatia uzuala de wildcard (masca) si nu poate fi folosit decāt ca atare.
import java.awt.C*; //eroare de compilare
In cazul īn care sunt importate doua pachete care contin o clasa cu acelasi nume atunci
referirea la ea trebuie facuta folosind numele complet al clasei respective.
//Stack.java
package my_package;
class Stack { ... }
//alt fisier sursa
import java.util.*;
import my_package.*;
...
Stack s = new Stack(); //ilegal -> conflict de nume
java.util.Stack s1 = new java.util.Stack(); //corect
my_package.Stack s2 = new my_package.Stack();//corect
Mediul Java importa automat trei pachete pentru toate fisierele sursa:
- pachetul java.lang
- pachetul curent
- pachetul implicit (fara nume)
Pachetele JDK
Limbajul Java se bazeaza pe o serie de biblioteci (pachete) cu ajutorul carora se pot construi
aplicatiile. Exista deci un set de clase deja implementate, ceea ce reduce timpul de dezvoltare
a unui program. Cele mai importante sunt:
| java.applet | suport pt scrierea de appleturi
|
| java.awt | suportul pentru grafica(Abstract Windowing Toolkit)
|
| java.beans | suport pentru scrierea de componente reutilizabile
|
| java.io | intrari/iesiri, acces la fisiere
|
| java.lang | clasele de baza ale limbajului
|
| java.math | operatii matematice
|
| java.net | acces la retea
|
| java.rmi | executie la distanta (Remote Message Interface)
|
| java.security | mecanisme de securitate : criptare, autentificare
|
| java.sql | interogari SQL
|
| java.text | suport pentru formatarea textelor
|
| java.util | clase utile : Vector, Stack, Random, etc
|
Pachetul java.lang contine elementele de baza ale limbajului si este importat automat.