Packages in Java allow classes to be grouped together logically and prevent naming collisions. The key Java packages are:
1) java.lang contains classes for primitive types, strings, math functions, and exceptions.
2) java.util contains utility classes like vectors and hash tables.
3) java.io contains stream classes for input/output.
Packages are organized hierarchically, for example the awt package contains classes for graphical user interfaces. Classes in packages can be accessed using their fully qualified name or by importing the package. Users can also create their own packages by specifying the package name at the top of Java files in a corresponding directory structure.