Programmerere er en organisert gjeng når det gjelder å skrive kode. De liker å arrangere programmene sine slik at de flyter på en logisk måte og kaller separate blokker med kode som hver har en bestemt jobb. Organisering av klassene de skriver, gjøres ved å lage pakker.
En pakke lar en utvikler gruppere klasser (og grensesnitt) sammen. Disse klassene vil være relatert på noen måte - de kan alle ha å gjøre med et spesifikt program eller utføre et spesifikt sett med oppgaver. For eksempel Java API er full av pakker. En av dem er javax.xml-pakken. Det og underpakkene inneholder alle klassene i Java API for å håndtere XML.
For å gruppere klasser i en pakke, må hver klasse ha en pakkeuttalelse definert øverst på sin.java-fil. Den lar kompilatoren vite hvilken pakke klassen tilhører og må være den første kodelinjen. Tenk deg for eksempel at du lager et enkelt Battleships-spill. Det er fornuftig å legge alle klassene som trengs i en pakke som kalles slagskip:
Det er der alle klassene som tilhører den pakken er lagret. Hvis for eksempel slagskip-pakken inneholder klassene GameBoard, Ship, ClientGUI der vil være filer som heter GameBoard.java, Ship.java og ClientGUI.java lagret i et kataloganrop slagskip.
For eksempel viser navnet på pakken javax.xml at XML er en underpakke av javaxpakken. Det stopper ikke der, under XML er det 11 underpakker: bind, crypto, datatype, navneområde, parsers, soap, stream, transform, validation, ws og XPath.
Katalogene på filsystemet må samsvare med pakkehierarkiet. For eksempel vil klassene i javax.xml.crypto-pakken leve i en katalogstruktur på.. \ javax \ xml \ crypto.
Men for kompilatoren er hver pakke et distinkt sett med klasser. Den ser ikke på en klasse i en underpakke som en del av foreldrepakken. Dette skillet blir tydeligere når det gjelder bruk av pakker.
I programvareselskaper og store prosjekter, der pakkene kan importeres til andre klasser, må navnene være særegne. Hvis to forskjellige pakker inneholder en klasse med samme navn, er det viktig at det ikke er noen navnekonflikt. Dette gjøres ved å sikre at pakkenavnene er forskjellige ved å starte pakkenavnet med firmaets domene, før de blir delt opp i lag eller funksjoner: