Ce face Pachete și importuri (package, import)
Un pachet grupează clase înrudite și evită conflictele de nume: java.util.List și java.awt.List sunt clase diferite. Declarația package ro.dexblog.magazin; stă pe prima linie a fișierului, iar fișierul trebuie pus în directorul corespunzător: ro/dexblog/magazin/Produs.java. Numele pachetelor se scriu cu litere mici, de obicei pornind de la un domeniu inversat.
import java.util.List; îți permite să scrii List în loc de java.util.List. import java.util.*; importă toate clasele din pachet (nu și din subpachete). Clasele din java.lang (String, Math, System) și cele din același pachet nu au nevoie de import. Importul nu copiază cod; doar scurtează numele.
import static aduce membri statici, ca să poți scrie sqrt(x) în loc de Math.sqrt(x). Fără package, clasa stă în pachetul fără nume (cum sunt exemplele de pe această pagină), potrivit doar pentru programe mici. Din Java 25 există și import module java.base;, care importă toate pachetele exportate de un modul.
Exemple
Exemplul 1: Importuri obișnuite, cu * și nume complet
LocalDate este importată explicit, ArrayList și List vin din java.util.*, iar java.time.DayOfWeek e folosită cu numele complet, fără import.
import java.time.LocalDate;
import java.util.*;
public class Main {
public static void main(String[] args) {
List<String> zile = new ArrayList<>();
LocalDate data = LocalDate.of(2026, 12, 1);
for (int i = 0; i < 3; i++) {
java.time.DayOfWeek zi = data.plusDays(i).getDayOfWeek();
zile.add(data.plusDays(i) + " " + zi);
}
Collections.reverse(zile);
zile.forEach(System.out::println);
}
}
Rezultat
2026-12-03 THURSDAY
2026-12-02 WEDNESDAY
2026-12-01 TUESDAY
Exemplul 2: import static
Cu import static, PI, pow și sqrt se folosesc fără prefixul Math..
import static java.lang.Math.PI;
import static java.lang.Math.pow;
import static java.lang.Math.sqrt;
public class Main {
public static void main(String[] args) {
double raza = 3;
System.out.printf("aria cercului: %.2f%n", PI * pow(raza, 2));
System.out.printf("ipotenuza 3-4: %.1f%n", sqrt(pow(3, 2) + pow(4, 2)));
}
}
Rezultat
aria cercului: 28.27
ipotenuza 3-4: 5.0
Exemplul 3: Un proiect mic cu două pachete
Fiecare fișier stă în directorul pachetului său. Clasa Produs și metodele folosite din alt pachet trebuie să fie public. Se compilează toate fișierele în out/ și se rulează clasa cu numele complet.
// fișier: src/ro/dexblog/magazin/Produs.java
package ro.dexblog.magazin;
public class Produs {
private final String nume;
private final double pret;
public Produs(String nume, double pret) {
this.nume = nume;
this.pret = pret;
}
public String eticheta() {
return nume + " - " + pret + " lei";
}
}
// fișier: src/ro/dexblog/app/Main.java
package ro.dexblog.app;
import ro.dexblog.magazin.Produs;
public class Main {
public static void main(String[] args) {
System.out.println(new Produs("Miere de salcâm", 45.0).eticheta());
}
}
// în terminal:
// $ javac -d out src/ro/dexblog/magazin/Produs.java src/ro/dexblog/app/Main.java
// $ java -cp out ro.dexblog.app.Main
Rezultat
Miere de salcâm - 45.0 lei
Greșeli frecvente
- Uiți importul:
cannot find symbol ... class ArrayList. Adaugăimport java.util.ArrayList;. - Pui fișierul în alt director decât pachetul declarat.
javacîl compilează, darjavanu găsește clasa:Could not find or load main class. Directorul trebuie să urmeze numele pachetului. - Rulezi cu numele scurt:
java -cp out Mainîn loc dejava -cp out ro.dexblog.app.Main. - Importezi două clase cu același nume scurt (
java.util.Listșijava.awt.List):a type with the same simple name List is already defined. Folosește numele complet pentru una dintre ele.
Comenzi înrudite
Modificatori de acces (public, protected, private): public, protected, private și lipsa modificatorului stabilesc cine poate vedea o clasă, un câmp, o metodă sau un constructor.Module (module-info.java): Un modul (module-info.java) grupează pachete și declară explicit de ce module depinde (requires) și ce pachete oferă altora (exports).static: static leagă un câmp sau o metodă de clasă, nu de un obiect: există o singură copie, accesată prin numele clasei.javac: javac este compilatorul Java: transformă fișierele .java în fișiere .class (bytecode) și raportează erorile și avertismentele.java (lansatorul): java pornește mașina virtuală Java și rulează un program: o clasă compilată, un fișier .jar sau direct un fișier sursă .java.