Import Statements
Without an Import
You can always refer to a class using its fully-qualified name — the package plus the class name — with no import at all.
Fully-qualified, no import
public class DateDemo {
public static void main(String[] args) {
java.time.LocalDate today = java.time.LocalDate.now();
System.out.println(today);
}
}Single-Class Imports
Importing the class once at the top of the file lets you refer to it by its simple name everywhere below, which is far more readable.
Single-class import
import java.time.LocalDate;
public class DateDemo {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
System.out.println(today);
}
}Wildcard Imports
A wildcard import brings in every public class from a package at once, using an asterisk in place of a specific class name.
Wildcard import
import java.util.*;
public class CollectionDemo {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
Map<String, Integer> scores = new HashMap<>();
names.add("Ada");
scores.put("Ada", 100);
System.out.println(names + " " + scores);
}
}Style | Example | Trade-off |
Single-class import | import java.util.List; | Explicit and clear, more lines |
Wildcard import | import java.util.*; | Fewer lines, less clear about actual dependencies |
Fully-qualified, no import | java.util.List<String> | Verbose, occasionally used to disambiguate name clashes |
java.lang Is Always Available
Static Imports
Static import
import static java.lang.Math.sqrt;
import static java.lang.Math.PI;
public class CircleDemo {
public static void main(String[] args) {
double radius = 4.0;
double area = PI * radius * radius;
System.out.println(area);
System.out.println(sqrt(16));
}
}import brings a package member into scope by simple name
Single-class imports are the clearest and most common style
Wildcard imports (import java.util.*;) work but obscure exact dependencies
java.lang is imported automatically and never needs an explicit import
import static brings in a specific static member for unqualified use