Packages and Project Organization in Java
๐ก Intermediate
๐ Definition
- Package: A namespace mechanism that groups related Java classes, interfaces, enums, and sub-packages together into organized directory structures, preventing class naming collisions.
- Java Module System (Java 9+ JPMS): A higher-level modularity system (
module-info.java) that explicitly declares module dependencies and exports public package APIs.
๐ฎ๐ณ Hindi
Packages Java files ko organized folders mein group karte hain aur name collisions ko rokte hain. Naming standard reverse domain format follow karta hai (com.company.project). Package components ko access karne ke liye import keyword ka use hota hai.
๐ฉ Marathi
Packages classes la organized directory madhye group kartat. Imports sathi import keyword vaparatat.
๐ 1. Package Naming Standards
Reverse Internet Domain Format is industry standard:
com.company.projectname.module
e.g., com.techcorp.ecommerce.payment
๐ 2. Types of Imports
// 1. Explicit Single Class Import (Best Practice)
import java.util.List;
import java.util.ArrayList;
// 2. Wildcard Package Import (Imports all public classes in package)
import java.util.*;
// 3. Static Import (Direct access to static members without class name qualifier)
import static java.lang.Math.PI;
import static java.lang.Math.sqrt;
public class MathTest {
double radius = 5.0;
double area = PI * radius * radius; // Direct PI access via static import!
}
๐ 3. Standard Maven / Gradle Directory Structure
Modern Java software projects adhere to standard build directory layouts:
my-java-app/
โโโ pom.xml # Maven Build Configuration
โโโ src/
โ โโโ main/
โ โ โโโ java/ # Java Source Code Root
โ โ โ โโโ com/techcorp/app/
โ โ โ โโโ Main.java # Application Entry Point
โ โ โ โโโ model/ # Data Models / Entities / Records
โ โ โ โ โโโ User.java
โ โ โ โโโ service/ # Business Logic Services
โ โ โ โ โโโ UserService.java
โ โ โ โโโ util/ # Utility Classes
โ โ โ โโโ PasswordHasher.java
โ โ โโโ resources/ # Properties, Configs, SQL scripts
โ โ โโโ application.properties
โ โโโ test/
โ โโโ java/ # JUnit Automated Test Files
โ โโโ com/techcorp/app/
โ โโโ UserServiceTest.java
๐ก Complete Example: Package Organization Across Files
File 1: com/techcorp/model/User.java
package com.techcorp.model;
public record User(int id, String name, String email) {}
File 2: com/techcorp/service/UserService.java
package com.techcorp.service;
import com.techcorp.model.User; // Importing User model from another package!
import java.util.ArrayList;
import java.util.List;
public class UserService {
private final List<User> users = new ArrayList<>();
public void registerUser(User user) {
users.add(user);
System.out.println("User Registered Successfully : " + user.name());
}
public List<User> getAllUsers() {
return List.copyOf(users);
}
}
File 3: com/techcorp/app/MainApp.java
package com.techcorp.app;
import com.techcorp.model.User;
import com.techcorp.service.UserService;
public class MainApp {
public static void main(String[] args) {
UserService userService = new UserService();
User u1 = new User(101, "Rahul Sharma", "rahul@example.com");
User u2 = new User(102, "Ananya Roy", "ananya@example.com");
userService.registerUser(u1);
userService.registerUser(u2);
System.out.println("\nTotal Registered Users Count : " + userService.getAllUsers().size());
}
}
๐ Output
User Registered Successfully : Rahul Sharma
User Registered Successfully : Ananya Roy
Total Registered Users Count : 2
โ ๏ธ Common Mistakes
- Placing
packagestatements anywhere other than the very first non-comment line in a.javafile. - Disagreement between the
package com.techcorp.app;declaration and the actual OS directory folder path (com/techcorp/app/). - Overusing wildcard imports (
import java.util.*;) causing accidental class name ambiguities.
๐ก๏ธ Safety / Important Notes
java.lang package classes (String, System, Integer, Math, Exception) are automatically imported into every Java file by default without needing explicit import statements.
๐ Real-World Usage
All enterprise application architectures (Spring Boot microservices, Android libraries, backend REST APIs) rely on package hierarchies to divide code by responsibility (controller, service, repository, entity, dto, config).
๐งช Try It Yourself
- Create a sub-package
com.myapp.modelcontaining a recordProduct. - Create
com.myapp.app.Mainand importProductto instantiate it.
๐ฏ Mini Challenge
Create a static import statement for java.util.Collections.sort and use it directly inside a main method without qualifying Collections..
๐ Related Topics
๐งญ Navigation
| โ Java Home | โ Previous: Exceptions | Next: File Input and Output โ |