Import Statements in Java

To access a class or method from another package we need to either use the fully qualified name (e.g. com.javajee.MyClass) or we can use the import statements.


Using import statement

You can use an import statement to import a single class (import java.util.List;) or all classes of a package (import java.util.*;). Remember that you can import only types (classes and interfaces, but not methods) using a regular import.

Consider an example:

package util;

public class BitUtils {

public static void process(byte[] b) { /* some code here */ }


You can access the static method process from another package either as:


or using an import statement and then use the class name without qualifier as:

import util.BitUtils;



What if the process method was default (no access modifier specified)? You cannot use a default access method from another package, as default members are not accessible outside the package.

When you use an import statement you are declaring only the package and not any sub packages. Therefore import java.util.*; import all of the classes in the java.util package, but not the java.util.jar classes or java.util.regex packages.


Static Imports

Regular import can import only types (classes and interfaces, but not methods). Static imports can import a class's static members (variables and methods) as well. 

Consider our BitUtils example again:

package util;

public class BitUtils {

public static void process(byte[] b) { /* some code here */ }


You can also use a static import as:

import static util.BitUtils.process;

and then simply use the process method as:


You can also use the fully qualified name and regular import here.

Another very common example is to use a static import for System.out.println as:

import static java.lang.System.out;

And then using it as:


Even if the feature is called static import, syntax is import static. 


Important points

  1. Below packages from JDK are automatically imported into your code by Java:

    1. java.lang package

    2. default package (package with no name). However the use of default package is not a good practice.

  2. The class or method should also be accessible, even if we have the import statement or use a fully qualified name. Accessibility is based on the access modifiers: Private members are accessible only within the same class. So you won't be able to access a private member even with fully qualified name or an import statement.

  3. Classes within the same package can access each other without the import statement or a fully qualified name.

  4. You cannot access a class that is defined in the default package from a class in any other package. 

  5. You can only import one package (i.e. all classes in that package) using a * or one class in an import statement. Following is an invalid import: import com.*.*;

  6. When importing classes in packages, you do not use static keyword. Static keyword is used for importing static members of a class.

  7. If your package structure is com.javajee.examples, and you import com.*, it will only import classes under com folder and not the ones under javajee or examples.

Quick Notes Finder Tags

Activities (1) advanced java (1) agile (3) App Servers (6) archived notes (2) Arrays (1) Best Practices (12) Best Practices (Design) (3) Best Practices (Java) (7) Best Practices (Java EE) (1) BigData (3) Chars & Encodings (6) coding problems (2) Collections (15) contests (3) Core Java (All) (55) course plan (2) Database (12) Design patterns (8) dev tools (3) downloads (2) eclipse (9) Essentials (1) examples (14) Exception (1) Exceptions (4) Exercise (1) exercises (6) Getting Started (18) Groovy (2) hadoop (4) hibernate (77) hibernate interview questions (6) History (1) Hot book (5) http monitoring (2) Inheritance (4) intellij (1) java 8 notes (4) Java 9 (1) Java Concepts (7) Java Core (9) java ee exercises (1) java ee interview questions (2) Java Elements (16) Java Environment (1) Java Features (4) java interview points (4) java interview questions (4) javajee initiatives (1) javajee thoughts (3) Java Performance (6) Java Programmer 1 (11) Java Programmer 2 (7) Javascript Frameworks (1) Java SE Professional (1) JPA 1 - Module (6) JPA 1 - Modules (1) JSP (1) Legacy Java (1) linked list (3) maven (1) Multithreading (16) NFR (1) No SQL (1) Object Oriented (9) OCPJP (4) OCPWCD (1) OOAD (3) Operators (4) Overloading (2) Overriding (2) Overviews (1) policies (1) programming (1) Quartz Scheduler (1) Quizzes (17) RabbitMQ (1) references (2) restful web service (3) Searching (1) security (10) Servlets (8) Servlets and JSP (31) Site Usage Guidelines (1) Sorting (1) source code management (1) spring (4) spring boot (3) Spring Examples (1) Spring Features (1) spring jpa (1) Stack (1) Streams & IO (3) Strings (11) SW Developer Tools (2) testing (1) troubleshooting (1) user interface (1) vxml (8) web services (1) Web Technologies (1) Web Technology Books (1) youtube (1)