java_research_8
java_research_8
Packages
In the preceding chapters, the name of each example class was taken from
the same name space. This means that a unique name had to be used for
each class to avoid name collisions. After a while, without some way to
manage the name space, you could run out of convenient, descriptive
names for individual classes. You also need some way to be assured that
the name you choose for a class will be reasonably unique and not collide
with class names chosen by other programmers. (Imagine a small group of
programmers fighting over who gets to use the name “Foobar” as a class
name. Or, imagine the entire Internet community arguing over who first
named a class “Espresso.”) Thankfully, Java provides a mechanism for
partitioning the class name space into more manageable chunks. This
mechanism is the package. The package is both a naming and a visibility
control mechanism. You can define classes inside a package that are not
accessible by code outside that package. You can also define class
members that are exposed only to other members of the same package.
This allows your classes to have intimate knowledge of each other, but not
expose that knowledge to the rest of the world.
Defining a Package
To create a package is quite easy: simply include a package command as
the first statement in a Java source file. Any classes declared within that
file will belong to the specified package. The package statement defines a
name space in which classes are stored. If you omit the package
statement, the class names are put into the default package, which has no
name. (This is why you haven’t had to worry about packages before now.)
While the default package is fine for short, sample programs, it is
inadequate for real applications. Most of the time, you will define a
package for your code.
This is the general form of the package statement:
package pkg;
Here, pkg is the name of the package. For example, the following
statement creates a package called mypackage:
package mypackage;
Typically, Java uses file system directories to store packages, and that is
the approach assumed by the examples in this book. For example, the
.class files for any classes you declare to be part of mypackage must be
stored in a directory called mypackage. Remember that case is
significant, and the directory name must match the package name exactly.
More than one file can include the same package statement. The
package statement simply specifies to which package the classes defined
in a file belong. It does not exclude other classes in other files from being
part of that same package. Most real-world packages are spread across
many files.
You can create a hierarchy of packages. To do so, simply separate each
package name from the one above it by use of a period. The general form
of a multileveled package statement is shown here:
package pkg1[.pkg2[.pkg3]];
A package hierarchy must be reflected in the file system of your Java
development system. For example, a package declared as
package a.b.c;
The easiest way to try the examples shown in this book is to simply
create the package directories below your current development directory,
put the .class files into the appropriate directories, and then execute the
programs from the development directory. This is the approach used in the
following example.
Remember, you will need to be in the directory above mypack when you
execute this command. (Alternatively, you can use one of the other two