EZ

Eduzan

Learning Hub

Back to JAVA

Packages in Java

Published 2025-12-12

Java

What is a Package?

A package in Java is a namespace that groups related classes, interfaces, subpackages, enums, and annotations. Packages help organize large projects and provide modularity.

Why Use Packages?

Packages provide several important benefits:

  1. Avoid name conflicts
    Example:
    university.department.cs.Student
    university.department.ee.Student
  2. Better organization
    Related classes are grouped logically.
  3. Access control
    • protected: accessible within the same package and subclasses
    • default (no modifier): accessible only within the same package
  4. Encapsulation (data hiding)
    Internal implementation can be hidden while exposing public APIs.
  5. Reusability
    Classes from packages can be reused across applications.

How Packages Work

Package names map directly to directory structures.

Example:

package university.department.cs;

Directory structure:

university/
 └── department/
     └── cs/

Java uses the CLASSPATH to locate packages and classes at runtime.


Package Naming Conventions

Java package names usually follow reverse domain naming:

com.company.project.module
org.organization.application
university.department.math

This guarantees global uniqueness.


Adding Classes to a Package

To add a class to a package:

  1. Declare the package at the top of the file
  2. Save the file in the corresponding directory
  3. Compile the file
package mypack;

public class MyClass {
    public void display() {
        System.out.println("Hello from MyClass in mypack.");
    }
}

Subpackages

A subpackage is a package inside another package.

java.util
java.util.concurrent

⚠️ Subpackages are not automatically imported with parent packages.

import java.util.*;          // Does NOT import java.util.concurrent

Importing Packages

Import a Specific Class

import java.util.ArrayList;

Import All Classes from a Package

import java.util.*;

Subpackages are excluded.


Accessing Classes in a Package

import java.util.List;

public class DemoImport {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();

        java.util.LinkedList<String> items =
                new java.util.LinkedList<>();
    }
}

Types of Packages in Java

1. Built-in Packages

Provided by Java API.

Common examples:

  • java.lang
  • java.util
  • java.io
  • java.net
  • java.awt

2. User-Defined Packages

// File: mypack/MyClass.java
package mypack;

public class MyClass {
    public void display() {
        System.out.println("Hello from MyClass in mypack.");
    }
}

Usage:

import mypack.MyClass;

public class TestPackage {
    public static void main(String[] args) {
        MyClass obj = new MyClass();
        obj.display();
    }
}

Output

Hello from MyClass in mypack.

Creating a Package (Compile & Run)

package myPackage;

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello from myPackage!");
    }
}

Compile

javac -d . HelloWorld.java

Run

java myPackage.HelloWorld

Static Import in Java

Static import allows direct access to static members without class name.

import static java.lang.Math.*;

public class StaticImportExample {
    public static void main(String[] args) {
        System.out.println(PI);
        System.out.println(sqrt(16));
    }
}

Handling Name Conflicts

When two packages contain classes with the same name, use fully qualified names.

import java.util.Date;
import java.sql.*;

public class ConflictExample {
    public static void main(String[] args) {
        java.util.Date utilDate = new java.util.Date();
        java.sql.Date sqlDate =
                new java.sql.Date(System.currentTimeMillis());

        System.out.println(utilDate);
        System.out.println(sqlDate);
    }
}

Directory Structure Mapping

com.example.shapes.Circle
↓
BASE_DIR/com/example/shapes/Circle.class

Important Built-in Packages


java.util Package

Provides utility classes for:

  • Collections
  • Date & time
  • Random numbers
  • Locale & formatting
  • Timers

Example

import java.util.ArrayList;

public class Example {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Cherry");

        System.out.println(fruits);
    }
}

java.lang Package

Automatically imported in every Java program.

Key classes:

  • Object
  • String
  • Math
  • System
  • Thread
  • Wrapper classes (Integer, Double, etc.)

Eg:

public class Example {
    public static void main(String[] args) {
        String msg = "Hello Java";
        System.out.println(msg.length());
    }
}

java.io Package

Handles:

  • File input/output
  • Streams
  • Serialization
  • Buffered I/O

Example: File Copy

import java.io.*;

public class FileCopyExample {
    public static void main(String[] args) {
        try (FileInputStream in = new FileInputStream("source.txt");
             FileOutputStream out = new FileOutputStream("dest.txt")) {

            int data;
            while ((data = in.read()) != -1) {
                out.write(data);
            }
            System.out.println("File copied successfully");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Buffered Reader & Writer Example

import java.io.*;

public class BufferedExample {
    public static void main(String[] args) {
        try (BufferedReader reader =
                     new BufferedReader(new FileReader("input.txt"));
             BufferedWriter writer =
                     new BufferedWriter(new FileWriter("output.txt"))) {

            String line;
            while ((line = reader.readLine()) != null) {
                writer.write(line);
                writer.newLine();
            }
            System.out.println("File processed successfully.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Summary

  • Packages organize Java code logically
  • Prevent naming conflicts
  • Improve encapsulation and security
  • Support modular, reusable development
  • Java provides rich built-in packages
  • Developers can create custom packages easily