Một module là container của các package được thiết kế cho tái sử dụng, mỗi module chứa một module descriptor bao gồm thông tin về tên module, phụ thuộc module (tên các module khác mà nó phụ thuộc) và tên các package nó xuất khẩu (exports) mà chỉ có thể được sử dụng bởi các module phụ thuộc vào nó.
Các ưu điểm của Module
- Đóng gói mạnh (Strong encapsulation) là một trong những ưu điểm chính của hệ thống module vì từ khóa public không còn truy cập được bởi mọi người. Bằng cách sử dụng hệ thống module, chúng ta có thể cho phép một tập hợp hạn chế các package được truy cập bởi ứng dụng bên ngoài.
- Làm cho ứng dụng trở nên nhẹ lượng (lightweight), có thể chạy trên nhiều thiết bị hơn. Vì nhẹ lượng, nó cải thiện hiệu suất của ứng dụng.
- Một kiến trúc cho phép chia ứng dụng thành các package bên ngoài (external) và bên trong (concealed), do đó dễ dàng tuân thủ nguyên tắc phân tách mối quan tâm (separation of concerns).
- Một số lớp nội bộ trong các package, ví dụ sun.security.*, com.sun.crypto.* không còn truy cập được vì các package này hiện được ẩn, do đó cải thiện bảo mật.
Một module có thể được khai báo trong file tên "module-info.java", đây là module descriptor.
module com.tutorialspoint.app {
// Các module mà module "com.tutorialspoint.app" phụ thuộc vào
requires com.tutorialspoint.services;
// Các package được module này xuất khẩu, có thể dùng bởi module khác
exports com.tutorialspoint.app.util;
}