In this article, you'll learn about packages and how to use them to create modular code in Java.
Java Package
A package is simply a container that groups related types (Java classes, interfaces, enumerations, and annotations). For example, in core Java, the ResultSet interface belongs to the java.sql package. The package contains all the related types that are needed for the SQL query and database connection.
If you want to use the ResultSet interface in your code, just import the java.sql package (Importing packages will be discussed later in the article).
As mentioned earlier, packages are just containers for Java classes, interfaces and so on. These packages help you to reserve the class namespace and create a maintainable code.
For example, you can find two Date classes in Java. However, the rule of thumb in Java programming is that only one unique class name is allowed in a Java project.
How did they manage to include two classes with the same name Date in JDK?
This was possible because these two Date classes belong to two different packages:
- java.util.Date - this is a normal Date class that can be used anywhere.
- java.sql.Date - this is a SQL Date used for the SQL query and such.
Based on whether the package is defined by the user or not, packages are divided into two categories:
Built-in Package
Built-in packages are existing java packages that come along with the JDK. For example, java.lang, java.util, java.io, etc. For example:
Output
User-defined Package
Java also allows you to create packages as per your need. These packages are called user-defined packages.
How to define a Java package?
To define a package in Java, you use the keyword package.
Java uses file system directories to store packages. Let's create a Java file inside another directory.
For example:
Now, edit Test.java file, and at the beginning of the file, write the package statement as:
Here, any class that is declared within the test directory belongs to the com.test package.
Here's the code:
Output
Here, the Test class now belongs to the com.test package.
Package Naming convention
The package name must be unique (like a domain name). Hence, there's a convention to create a package as a domain name, but in reverse order. For example, com.company.name
Here, each level of the package is a directory in your file system. Like this:
And, there is no limitation on how many subdirectories (package hierarchy) you can create.
How to create a package in Intellij IDEA?
In IntelliJ IDEA, here's how you can create a package:
- Right-click on the source folder.
- Go to new and then package.
3. A pop-up box will appear where you can enter the package name.
Once the package is created, a similar folder structure will be created on your file system as well. Now, you can create classes, interfaces, and so on inside the package.
How to import packages in Java?
Java has an import statement that allows you to import an entire package (as in earlier examples), or use only certain classes and interfaces defined in the package.
The general form of import statement is:
For Example
The import statement is optional in Java.
If you want to use class/interface from a certain package, you can also use its fully qualified name, which includes its full package hierarchy.
Here is an example to import a package using the import statement.
The same task can be done using the fully qualified name as follows:
Example: Package and importing package
Suppose, you have defined a package com.programiz that contains a class Helper.
Now, you can import Helper class from com.programiz package to your implementation class. Once you import it, the class can be referred directly by its name. Here's how:
Output
Here,
- the Helper class is defined in com.programiz package.
- the Helper class is imported to a different file. The file contains UseHelper class.
- The getFormattedDollar() method of the Helper class is called from inside the UseHelper class
In Java, the import statement is written directly after the package statement (if it exists) and before the class definition.
For example,
If you have any doubts or questions, please let me know.