Ask Questions?

View Latest Questions


 
 

Packages - Importing
Posted on: July 26, 2006 at 12:00 AM
Multiple classes of larger programs are usually grouped together into a package.

Java Notes

Packages - Importing

Multiple classes of larger programs are usually grouped together into a package. Packages correspond to directories in the file system, and may be nested just as directories are nested.

Using existing packages

Java libraries are organized in packages (directories). The most common way to get access to them is to use the import statement. For example,
import java.util.*;
. . .
ArrayList students;  // ArrayList is a class in java.util
gives your program access to the all (that's what the "*" means) classes in the package java.util. The source files for these classes are in a directory named util, which is in a directory named java.

Importing classes explictly

If you need only one class from a package, eg ArrayList, you can write

import java.util.ArrayList;
. . .
ArrayList students;  // same as above.

You might think that importing all classes from a package is inefficient, but there is no noticeable difference in my experience. Consequently most programs use the ".*" style of import.

Using package qualifiers instead of imports

The import statement is not required. Class references can be made but explicit qualification with the "." operator. For example,
java.util.ArrayList students;  // fully qualified.  No need for import.

The fully qualified style is used in some textbooks, but is generally not used when programming, where the import style is almost universal.

However, there is one situation where qualification is necessary - when two classes have the same name, but are in different packages. For example, there is both java.util.Timer and java.swing.Timer. Because it's common to import all classes in both java.util and java.swing, the name Timer is ambiguous and can't be used without qualification.

import java.util.*;
import java.swing.*;
. . .
Timer t;  //AMBIGUOUS - compilation error
java.util.Timer t;  // OK

Packages within packages require additional imports</