Module là tập hợp mã, dữ liệu và tài nguyên. Nó là một tập hợp các package liên quan và các kiểu như class, abstract class, interface cùng mã, file dữ liệu và tài nguyên tĩnh.
Đặc điểm của Module:
- Module phải định nghĩa giao diện (interface) để giao tiếp với các module khác.
- Module định nghĩa sự tách biệt giữa giao diện module và triển khai module.
- Module trình bày một tập hợp thuộc tính chứa thông tin.
- Hai hoặc nhiều module có thể lồng nhau (nested).
- Module có trách nhiệm rõ ràng, được định nghĩa. Mỗi chức năng chỉ được triển khai bởi một module.
- Module phải có thể kiểm thử độc lập khỏi các module khác.
- Lỗi trong một module không lan truyền sang module khác.
Nếu có hai module: M1 và M2 và một package trong module. M2 chứa Pkg2 mà chúng ta muốn truy cập từ module M1, thì các điều kiện sau phải thỏa mãn:
- Module M1 phụ thuộc vào module M2, khi đó module M1 khai báo trong định nghĩa của nó "requires" module M2.
- Module M2 export package Pkg2 để có sẵn cho các module phụ thuộc vào nó. Trong khai báo module M2, chỉ định rằng nó "exports" package Pkg2.