Програмери су организована гомила када је у питању писање кода. Они воле да своје програме пореде тако да логично тече, називајући засебне блокове кода за које сваки има одређени посао. Организовање наставе које пишу врши се креирањем пакета.
Пакет омогућава програмеру да групира класе (и интерфејсе) заједно. Све ће те класе бити на неки начин повезане - све би могле бити повезане са одређеном апликацијом или извршавањем одређеног скупа задатака. На пример, тхе Јава АПИ је пун пакета. Један од њих је јавак.кмл пакет. Садржај и његови подпакони садрже све класе у Јава АПИ-ју које се тичу руковања КСМЛ.
Да бисте груписали класе у пакет, свака класа мора имати дефиницију пакета дефинисану на врху његове.јава филе. Омогућује компајлеру да зна којем пакету припада класа и да мора бити прва линија кода. На пример, замислите да правите једноставну игру Баттлесхипс. Има смисла ставити све класе потребне у пакет који се зове борбени бродови:
Овде се чувају све класе које припадају том пакету. На пример, ако пакет бојних бродова садржи класе ГамеБоард, Схип, ЦлиентГУИ, тада су ту ће бити датотеке под називом ГамеБоард.јава, Схип.јава и ЦлиентГУИ.јава сачуване у позиву у директоријум борбени бродови.
На пример, име пакета јавак.кмл показује да је КСМЛ потпакет јавак пакета. То се не зауставља, под КСМЛ-ом се налази 11 потпакета: бинд, црипто, типе дата, намеспаце, парсерс, сапун, стреам, трансформација, валидација, вс и КСПатх.
Директорији на датотечном систему морају одговарати хијерархији пакета. На пример, класе у пакету јавак.кмл.црипто живеће у структури директорија.. \ јавак \ кмл \ црипто.
Али, што се тиче преводиоца, сваки пакет је посебан скуп класа. Не види класу у претпаковини као део свог родитељског пакета. Ова разлика постаје очигледнија када је у питању коришћење пакета.
У софтверским компанијама и великим пројектима, где би се пакети могли увести у друге класе, имена морају бити разликовна. Ако два различита пакета садрже класу са истим именом, важно је да не може доћи до сукоба у именовању. Ово се постиже тако што ћете осигурати да се имена пакета разликују тако што ћете започети назив пакета са доменом компаније, пре него што се поделите на слојеве или функције: