Following the optional package declaration, you can have import statements, which allow you to specify classes that can be referenced without qualifying them with their package.
Packages are directories / folders that contain the Java classes, and are a way of grouping related classes together. For small programs it's common to omit a package specification (Java creates what it calls a default package in this case).
NetBeans 4.0 uses packages in several ways.
The package-path is a dot-separated series of nested packages, eg,
java.awt or java.awt.event.
You can import (make visible) either a single class or all classes in package
with the "*" wildcard character.
Suggestion: Use only the first wildcard case below. It is by far the most common usage.
import package-path.*; // Makes all classes in package visible.
import package-path.class; // Makes only class visible.
import static package-path.*; // Makes all static variables in all classes in package visible.
import static package-path.class; // Makes all static variables in class visible.
The JOptionPane class is in the swing package, which is located in the javax package.
import javax.swing.*; // Make all classes visible altho only one is used.
class ImportTest {
public static void main(String[] args) {
JOptionPane.showMessageDialog(null, "Hi");
System.exit(0);
}
}
There are 166 packages containing 3279 classes and interfaces in Java 5. However, there are only a few packages that are used in most programming. GUI programs often use the first three imports.
import java.awt.*; | Common GUI elements. |
import java.awt.event.*; | The most common GUI event listeners. |
import javax.swing.*; | More common GUI elements. Note "javax". |
import java.util.*; | Data structures (Collections), time, Scanner, etc classes. |
import java.io.*; | Input-output classes. |
import java.text.*; | Some formatting classes. |
import java.util.regex.*; | Regular expression classes. |
import javax.swing.JOptionPane; // Make a single class visible.
class ImportTest {
public static void main(String[] args) {
JOptionPane.showMessageDialog(null, "Hi");
System.exit(0);
}
}
There is no need to use import when names are fully qualified. You will see some programs in this style, but it isn't as common because it makes source programs more congested and harder to read.
class ImportTest {
public static void main(String[] args) {
javax.swing.JOptionPane.showMessageDialog(null, "Hi");
System.exit(0);
}
}
A: No, import only tells the compiler where to look for symbols.
A: No. The search for names is very efficient so there is no effective difference.
A: This shows good intentions, but ...
A: The wildcard "*" only makes the classes in this package visible, not any of the subpackages.
A: All classes in the java.lang package are visible without an import.
A: No. Group them for readability.
Java 5 added an import static option that allows static variables (typically constants) to be referenced without qualifying them with a class name. For example, after
import static java.awt.Color;
It would then be possible to write
Color background = RED;
instead of
Color background = Color.RED;
Adding this "feature" wasn't the best idea because it leads to name pollution and confusion about which class constants come from. Even Sun (see References below) basically advises not to it!