1. Pacchetti
I normali programmi Java coinvolgono un numero enorme di classi. Quanti? Migliaia, decine di migliaia. E se si tiene conto anche del fatto che il programma utilizza varie librerie contenenti classi scritte da altri programmatori, allora il numero di classi può essere facilmente misurato in milioni!
Sarebbe quasi impossibile trovare nomi univoci per tutti questi milioni, o anche solo migliaia, di classi.
Certo, possiamo immaginare nomi come A123
e B345
, ma se stiamo parlando di scegliere un buon nome di classe, uno che semplifichi la comprensione della classe (come String
per le stringhe, per esempio), allora anche generare un migliaio di nomi univoci è molto di lavoro.
Ecco perché in Java è consuetudine raggruppare le classi in pacchetti utilizzando la parola chiave package.
Le classi Java ei relativi pacchetti sono molto simili a file e cartelle su un computer.
Ad esempio, se hai bisogno di archiviare 10 documenti sul tuo computer, probabilmente li conserveresti in un'unica cartella. Ma cosa succede se si dispone di migliaia di documenti (ad esempio, un archivio di tutti i documenti di un'azienda)?
Con migliaia di documenti da archiviare, una soluzione è creare più livelli di cartelle con buoni nomi descrittivi. E poi in una cartella all'ultimo livello, archivia i documenti relativi a quella particolare cartella. Anche i buoni nomi descrittivi per i documenti non fanno male.
In effetti, facciamo tutto questo per le classi in Java.
I file contenenti le classi sono archiviati in diverse directory (cartelle) e il nome completo della cartella della classe con tutte le sue sottocartelle è il nome del pacchetto. Esempio:
Percorso del file | Nome del pacchetto | Nome della classe |
---|---|---|
|
|
|
|
|
|
|
|
|
A differenza dei nomi delle cartelle, i nomi dei pacchetti utilizzano un punto come delimitatore. In altre parole, la cartella \com\codegym\tasks\
corrisponde al com.codegym.tasks
pacchetto.
2. src
cartella
In Java, è consuetudine archiviare tutte le classi per un programma in una singola cartella (e sottocartelle). Questa cartella è solitamente chiamata src
(abbreviazione di source ).
Questa cartella è chiamata project root (o source root ) e tutti i percorsi dei pacchetti sono relativi ad essa. Esempi:
Cartelle | Nome del pacchetto |
---|---|
|
|
|
|
In questa situazione, i programmatori dicono qualcosa come "abbiamo un progetto chiamato my
, che si trova nella c:\projects\data
cartella" o "abbiamo un progetto chiamato project
, che si trova nella d:\files\git\data
cartella"
È meglio mettere sempre le classi nei pacchetti e non direttamente nella cartella principale ( src
. Se hai solo poche classi, questo non rappresenta un problema. Ma quando ci sono molte classi, è molto facile confondersi. Quindi , crea sempre le tue classi solo nei pacchetti.
In Java, è consuetudine assegnare nomi significativi a classi e pacchetti. Molte aziende rilasciano le proprie librerie (un insieme di classi) e, per evitare confusione, incorporano il nome dell'azienda/sito web/progetto nel nome del pacchetto:
Nome del pacchetto | Nome azienda/progetto |
---|---|
|
Progetto Apache |
|
Società Oracle |
|
Società Oracle, progetto Java |
|
Società IBM, progetto WebSphere |
|
Progetto JBoss |
3. Contenuto del file
Secondo lo standard del linguaggio Java, le informazioni sul nome di una classe e sul nome del suo pacchetto devono essere incluse nel file con il codice. La forma generale è mostrata di seguito:
package package-name;
public class ClassName
{
}
Il nome del pacchetto deve corrispondere al nome della cartella e il nome del file deve corrispondere al nome della classe pubblica.
Se hai un file, allora dovrebbe contenere questo:...\src\com\project\Service.java
package com.project;
public class Service
{
}
4. Importazione di classi
Il nome della classe e il nome del pacchetto formano quello che viene chiamato il nome completo della classe .
Esempi:
Nome completo | Nome del pacchetto | Nome della classe |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
nessuno |
|
Le buone notizie:
Il nome completo della classe è sempre univoco all'interno di un progetto. Dopotutto, non puoi creare due file con lo stesso nome in una singola cartella.
La cattiva notizia:
I nomi di classe completi sono in genere lunghi o molto lunghi. E scrivere un nome lungo (ad esempio java.util.ArrayList) ogni volta nel codice è super scomodo.
Ecco perché Java ha aggiunto la possibilità di importare classi .
Puoi usare il nome breve di una classe nel tuo codice, ma devi prima far sapere al compilatore quale nome di classe completo corrisponde al nome breve . Cosa succede se ora hai più classi con lo stesso nome nel tuo progetto? Oppure ne hai originariamente uno, ma poi ne sono stati aggiunti altri 15...
Per utilizzare un nome di classe breve nel codice, è necessario aggiungere il seguente costrutto:
import fully-qualified-class-name;
Questa dichiarazione deve essere aggiunta all'inizio della classe, subito dopo la package
dichiarazione.
Esempio:
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();
}
}
Abbiamo importato due classi ( java.util.Scanner
e com.test.helper.special.ArrayList
), quindi possiamo usare i loro nomi brevi nel nostro codice. E il compilatore saprà quali classi usare.
Ed ecco come sarebbe lo stesso codice se non avessimo usato 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();
}
}
A proposito, se il tuo progetto ha due classi denominate Scanner
, non sarai in grado di importarle entrambe nello stesso file: dovrai usare il nome lungo per una di esse.
Diciamo che hai una Jen nella tua squadra. Non ci sono problemi di comunicazione, poiché tutti sanno chi è. Ma se ci fossero tre Jen, dovrebbero essere usati nomi completi per distinguerli.
A proposito, se sei troppo pigro per aggiungere molte istruzioni di importazione alla tua classe, puoi usare la sua versione pigra: invece di un nome di classe specifico, metti un asterisco:
import package-name.*;
Ciò ti consentirà di utilizzare i nomi brevi di tutte le classi nel pacchetto.
Tutte le classi nel java.lang
pacchetto vengono importate automaticamente, quindi non è necessario scrivere un'istruzione import
per esse. Sei sicuro di conoscere già una di queste classi: java.lang.String
. Sì, è giusto. Questa è la String
classe che abbiamo usato per lavorare con le stringhe.
GO TO FULL VERSION