Chapter 4. Packages
One of the least appreciated good parts of Java can be found at the beginning of every Java
file. This feature is so ubiquitous that most experienced Java programmers don't even notice
it, much less take the time to think about what it does for them and how to use it correctly.
I am speaking of the package feature of Java, along with the notion of importing from some
other package. This feature, and the protection mechanisms that are part of it, is one of the
simple tools that allow large-scale software to be developed in the language.
It is easy to ignore the packaging system, to use it carelessly, or to simply not give it much
thought until it causes you trouble. But rightly understood, the package mechanism allows the
design of the overall software system to be disentangled and made independent in a number of
important ways. If your package declarations don't reflect your design decisions, you aren't
using the system correctly (although you will hardly be singled out for that sin). If they do,
you have introduced another mechanism to allow understanding and isolation to your system,
making it easier to comprehend, develop, and maintain.
The first bit of information that the compiler sees in any Java source file is the package declar-
ation. There can be lots of commentary prior to this declaration (for example, it is common
practice to put any licensing or copyright information in a comment at the very beginning of
a source file), but the compiler discards all of that. The first thing that the compiler needs to
know, and probably the first thing a programmer should think about, is the package in which
the contents of the source file reside.
A package declaration is simply the keyword package , followed by some name, followed by
a semicolon. The name of the package may be a dot-separated list of simple names, in which
case a package hierarchy is being identified. For example, if the first noncomment, nonblank
line in a source file is: