Java में पैकेजों का उपयोग नामकरण संघर्षों को रोकने, एक्सेस नियंत्रित करने, क्लासेस, इंटरफेसेस, एन्यूमरेशन्स और एनोटेशन्स की खोज/स्थिति और उपयोग को आसान बनाने के लिए किया जाता है।
एक पैकेज को संबंधित प्रकारों (क्लासेस, इंटरफेसेस, एन्यूमरेशन्स, और एनोटेशन्स) के समूह के रूप में परिभाषित किया जा सकता है जो एक्सेस सुरक्षा और नेमस्पेस प्रबंधन प्रदान करता है।
Java में मौजूदा पैकेज
- java.lang - मौलिक क्लासेस को बंडल करता है (अंतर्निहित रूप से इम्पोर्टेड)
- java.io - इनपुट, आउटपुट फंक्शन्स के लिए क्लासेस
- java.util - कलेक्शन फ्रेमवर्क, डेट/टाइम, यूटिलिटीज
- java.net - नेटवर्किंग क्लासेस
- java.sql - JDBC डेटाबेस एक्सेस
- java.time - आधुनिक डेट/टाइम API (Java 8+)
- java.nio - नॉन-ब्लॉकिंग I/O
- java.concurrent - कनकरेंसी यूटिलिटीज
- java.stream - स्ट्रीम API (Java 8+)
- javax.*, jakarta.* - एक्सटेंशन/एंटरप्राइज API
उपयोगकर्ता-परिभाषित पैकेज (User-defined Packages)
प्रोग्रामर क्लासेस/इंटरफेसेस आदि के समूह को बंडल करने के लिए अपने स्वयं के पैकेज परिभाषित कर सकते हैं। आपके द्वारा कार्यान्वित संबंधित क्लासेस को समूहित करना एक अच्छी प्रथा है ताकि एक प्रोग्रामर आसानी से निर्धारित कर सके कि क्लासेस, इंटरफेसेस, एन्यूमरेशन्स, और एनोटेशन्स संबंधित हैं।
चूंकि पैकेज एक नया नेमस्पेस बनाता है, इसलिए अन्य पैकेजों में नामों के साथ कोई नाम टकराव नहीं होगा। पैकेजों का उपयोग करके, एक्सेस कंट्रोल प्रदान करना आसान होता है और संबंधित क्लासेस का पता लगाना भी आसान होता है।
पैकेज प्रकार वर्गीकरण
| श्रेणी | विवरण | उदाहरण |
|---|---|---|
| बिल्ट-इन / स्टैंडर्ड | JDK के साथ प्रदान किए गए | java.lang, java.util, java.io |
| एक्सटेंशन / थर्ड-पार्टी | बाहरी लाइब्रेरीज़ | org.springframework, com.google.gson, org.junit |
| उपयोगकर्ता-परिभाषित | डेवलपर द्वारा बनाए गए | com.myapp.service, com.myapp.model |
पैकेज एक्सेस मॉडिफायर्स
| मॉडिफायर | क्लास | पैकेज | सबक्लास | वर्ल्ड |
|---|---|---|---|---|
| public | ✓ | ✓ | ✓ | ✓ |
| protected | ✓ | ✓ | ✓ | ✗ |
| default (कोई नहीं) | ✓ | ✓ | ✗ | ✗ |
| private | ✓ | ✗ | ✗ | ✗ |
पैकेज नामकरण सर्वोत्तम अभ्यास
- रिवर्स डोमेन नेम:
com.companyname.projectname.module - लोअरकेस: सभी अक्षर लोअरकेस
- सार्थक: कार्यक्षमता दर्शाने वाला
- पदानुक्रमित: सामान्य से विशिष्ट
- संक्षिप्त: अनावश्यक गहराई से बचें
// अच्छे उदाहरण com.acme.billing.invoice com.acme.billing.payment org.apache.commons.lang3 com.google.gson // बुरे उदाहरण MyPackage (अपरकेस) com.acme..billing (डबल डॉट) java.mypackage (java.* रिजर्व्ड) com.acme.billing.invoice.processing.handlers.utils (बहुत गहरा)
Java 9+ : मॉड्यूल्स (Modules)
Java 9 ने पैकेज से ऊपर एक स्तर - मॉड्यूल्स पेश किया:
// module-info.java
module com.myapp {
requires java.sql;
requires org.springframework.core;
exports com.myapp.api;
exports com.myapp.service;
// आंतरिक पैकेज - निर्यात नहीं
// uses/provides सर्विसेस के लिए
}
निष्कर्ष: Java में तीन प्रकार के पैकेज होते हैं: बिल्ट-इन (JDK), थर्ड-पार्टी (लाइब्रेरीज़), और उपयोगकर्ता-परिभाषित। उचित पैकेज संगठन रखरखाव योग्य, स्केलेबल एप्लिकेशन के लिए महत्वपूर्ण है। Java 9+ में मॉड्यूल्स मजबूत एनकैप्सुलेशन और निर्भरता प्रबंधन जोड़ते हैं।