Programmeurs zijn een georganiseerde groep als het gaat om het schrijven van code. Ze willen hun programma's zo organiseren dat ze op een logische manier stromen, waarbij ze afzonderlijke codeblokken aanroepen die elk een bepaalde taak hebben. Het organiseren van de klassen die ze schrijven, wordt gedaan door pakketten te maken.
Met een pakket kan een ontwikkelaar klassen (en interfaces) samen groeperen. Deze lessen zijn allemaal op een of andere manier gerelateerd - ze kunnen allemaal te maken hebben met een specifieke applicatie of een specifieke set taken uitvoeren. Bijvoorbeeld de Java API zit vol met pakketten. Een daarvan is het javax.xml-pakket. Het en zijn subpakketten bevatten alle klassen in de Java API die te maken hebben met afhandeling XML.
Om klassen in een pakket te groeperen, moet voor elke klasse een pakketinstructie bovenaan zijn gedefinieerd.java-bestand. Het laat de compiler weten tot welk pakket de klasse behoort en moet de eerste regel code zijn. Stel je bijvoorbeeld voor dat je een eenvoudig Battleships-spel maakt. Het is logisch om alle benodigde klassen in een pakket genaamd slagschepen te stoppen:
Hier worden alle klassen opgeslagen die bij dat pakket horen. Als het slagschippakket bijvoorbeeld de klassen GameBoard, Ship, ClientGUI bevat, dan is dat het geval worden bestanden met de naam GameBoard.java, Ship.java en ClientGUI.java opgeslagen in een directory-aanroep slagschepen.
De naam van het pakket javax.xml geeft bijvoorbeeld aan dat XML een subpakket is van het pakket javax. Het stopt daar niet, onder XML zijn er 11 subpakketten: binden, crypto, datatype, naamruimte, parsers, soap, stream, transformeren, validatie, ws en XPath.
De mappen op het bestandssysteem moeten overeenkomen met de pakkethiërarchie. De klassen in het pakket javax.xml.crypto leven bijvoorbeeld in een mapstructuur van.. \ javax \ xml \ crypto.
Maar wat de compiler betreft, is elk pakket een afzonderlijke set klassen. Het beschouwt een klasse in een subpakket niet als onderdeel van het bovenliggende pakket. Dit onderscheid wordt duidelijker als het gaat om het gebruik van pakketten.
In softwarebedrijven en grote projecten, waar de pakketten in andere klassen kunnen worden geïmporteerd, moeten de namen onderscheidend zijn. Als twee verschillende pakketten een klasse met dezelfde naam bevatten, is het belangrijk dat er geen naamconflict bestaat. Dit wordt gedaan door ervoor te zorgen dat de pakketnamen verschillen door de pakketnaam te starten met het bedrijfsdomein voordat deze wordt opgesplitst in lagen of functies: