1. Forfaits

Les programmes Java ordinaires impliquent un nombre énorme de classes. Combien? Des milliers, des dizaines de milliers. Et si vous tenez également compte du fait que le programme utilise diverses bibliothèques contenant des classes écrites par d'autres programmeurs, alors le nombre de classes peut facilement se mesurer en millions !

Il serait presque impossible de trouver des noms uniques pour l'ensemble de ces millions, voire des milliers de classes.

Bien sûr, nous pouvons imaginer des noms comme A123et B345, mais si nous parlons de choisir un bon nom de classe, un qui facilite la compréhension de la classe (comme Stringpour les chaînes, par exemple), alors même générer mille noms uniques est beaucoup de travail.

C'est pourquoi en Java, il est d'usage de regrouper les classes dans des packages à l'aide du mot-clé package.

Les classes Java et leurs packages sont très similaires aux fichiers et dossiers d'un ordinateur.

Par exemple, si vous avez besoin de stocker 10 documents sur votre ordinateur, vous les conserverez probablement dans un seul dossier. Mais que se passe-t-il si vous avez des milliers de documents (par exemple, un référentiel de tous les documents d'une entreprise) ?

Avec des milliers de documents à stocker, une solution consiste à créer plusieurs niveaux de dossiers avec de bons noms descriptifs. Et puis dans un dossier au tout dernier niveau, stockez les documents qui se rapportent à ce dossier particulier. De bons noms descriptifs pour les documents ne font pas de mal non plus.

En fait, nous faisons tout cela pour les classes en Java.

Les fichiers contenant les classes sont stockés dans différents répertoires (dossiers), et le nom complet du dossier de la classe avec tous ses sous-dossiers est le nom du package. Exemple:

Chemin d'accès au fichier Nom du paquet Nom du cours
\com\codegym\tasks\Solution.java
com.codegym.tasks
Solution
\com\io\FileInputStream.java
com.io
FileInputStream
\java\util\ArrayList.java
java.util
ArrayList

Contrairement aux noms de dossiers, les noms de packages utilisent un point comme délimiteur. En d'autres termes, le dossier \com\codegym\tasks\correspond au com.codegym.taskspackage.


2. srcdossier

En Java, il est d'usage de stocker toutes les classes d'un programme dans un seul dossier (et sous-dossiers). Ce dossier est généralement appelé src(abréviation de source ).

Ce dossier est appelé la racine du projet (ou source root ) et tous les chemins de package lui sont relatifs. Exemples:

Dossiers Nom du paquet
c:\projects\data\my\src\com\codegym\tasks\
com.codegym.tasks
d:\files\git\data\project\src\com\codegym\tasks\
com.codegym.tasks

Dans cette situation, les programmeurs disent quelque chose comme "nous avons un projet nommé my, qui se trouve dans le c:\projects\datadossier" ou "nous avons un projet nommé project, qui se trouve dans le d:\files\git\datadossier"

Il est préférable de toujours mettre les classes dans des packages et non directement dans le dossier racine ( src. Si vous n'avez que quelques classes, cela ne pose pas de problème. Mais lorsqu'il y a beaucoup de classes, il est très facile de s'embrouiller. Donc , créez toujours vos classes uniquement dans des packages.

En Java, il est d'usage de donner des noms significatifs aux classes et aux packages. De nombreuses entreprises publient leurs propres bibliothèques (un ensemble de classes) et, pour éviter toute confusion, elles incorporent le nom de l'entreprise/du site Web/du projet dans le nom du package :

Nom du paquet Nom de l'entreprise/du projet
org.apache.common
org.apache.tomcat
org.apache.util
Projet Apache
com.oracle.jdbc
Société Oracle
java.io
javax.servlet
Société Oracle, projet Java
com.ibm.websphere
Société IBM, projet WebSphere
com.jboss
Projet JBoss

3. Contenu du fichier

Selon la norme du langage Java, les informations sur un nom de classe et le nom de son package doivent être incluses dans le fichier avec le code. La forme générale est présentée ci-dessous :

package package-name;

public class ClassName
{

}

Le nom du package doit correspondre au nom du dossier et le nom du fichier doit correspondre au nom de la classe publique.

Si vous avez un fichier, alors il devrait contenir ceci :...\src\com\project\Service.java

package com.project;

public class Service
{

}

4. Importer des cours

Le nom de la classe et le nom du package forment ce qu'on appelle le nom complet de la classe .

Exemples:

Nom complet Nom du paquet Nom du cours
java.io.FileInputStream
java.io
FileInputStream
java.lang.String
java.lang
String
java.util.ArrayList
java.util
ArrayList
org.apache.tomcat.Servlet
org.apache.tomcat
Servlet
Cat
aucun
Cat

La bonne nouvelle:

Le nom de classe complet est toujours unique au sein d'un projet. Après tout, vous ne pouvez pas créer deux fichiers portant le même nom dans un même dossier.

Les mauvaises nouvelles:

Les noms de classe complets sont généralement longs ou très longs. Et écrire un nom long (par exemple java.util.ArrayList) à chaque fois dans le code est super gênant.

C'est pourquoi Java a ajouté la possibilité d' importer des classes .

Vous pouvez utiliser le nom abrégé d'une classe dans votre code, mais vous devez d'abord indiquer au compilateur quel nom de classe complet correspond au nom abrégé . Que se passe-t-il si vous avez maintenant plusieurs classes portant le même nom dans votre projet ? Ou vous en avez un à l'origine, mais 15 autres ont été ajoutés...

Pour utiliser un nom de classe court dans votre code, vous devez ajouter la construction suivante :

import fully-qualified-class-name;

Cette déclaration doit être ajoutée au tout début de la classe, juste après la packagedéclaration.

Exemple:

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();
   }
}

Nous avons importé deux classes ( java.util.Scanneret com.test.helper.special.ArrayList), afin que nous puissions utiliser leurs noms courts dans notre code. Et le compilateur saura quelles classes utiliser.

Et voici à quoi ressemblerait le même code si nous n'avions pas utilisé 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();
   }
}

D'ailleurs, si votre projet comporte deux classes nommées Scanner, vous ne pourrez pas les importer toutes les deux dans le même fichier : vous devrez utiliser le nom long pour l'une d'entre elles.

Disons que vous avez une Jen dans votre équipe. Il n'y a pas de problèmes de communication, puisque tout le monde sait qui elle est. Mais s'il y avait trois Jens, alors des noms pleinement qualifiés devraient être utilisés pour les distinguer.

Note 1

Au fait, si vous êtes trop paresseux pour ajouter beaucoup d'instructions d'importation à votre classe, vous pouvez utiliser sa version paresseuse : au lieu d'un nom de classe spécifique, mettez un astérisque :

import package-name.*;

Cela vous permettra d'utiliser les noms courts de toutes les classes du package.

Note 2

Toutes les classes du java.langpackage sont importées automatiquement, vous n'avez donc pas besoin d'écrire une importdéclaration pour elles. Vous connaissez sûrement déjà l'une de ces classes : java.lang.String. Oui c'est vrai. C'est la Stringclasse que nous avons utilisée pour travailler avec des chaînes.