Packages
A package is a namespace that groups related classes, interfaces, and sub-packages together. As a codebase grows from a handful of files to thousands, packages are what keep names from colliding and let you organize code by feature, layer, or team ownership — much like folders organize files on disk.
Declaring a Package
src/com/example/myapp/OrderProcessor.java
package com.example.myapp;
public class OrderProcessor {
public void process() {
System.out.println("Processing order...");
}
}Naming Convention: Reverse Domain Name
Directory Structure Must Mirror the Package
The Java compiler and JVM expect a package's directory layout on disk to exactly match its dotted name. Each dot in the package name corresponds to one directory level.
Package com.example.myapp on disk
src/
└── com/
└── example/
└── myapp/
├── OrderProcessor.java
└── OrderProcessor.classThe Default (Unnamed) Package
Why Packages Matter
Avoiding name collisions between classes from different libraries or teams
Organizing large codebases into logical, browsable units
Controlling visibility — package-private members are accessible only within the same package
Making it possible to distribute reusable code as a JAR that other projects can depend on