हम इस ट्यूटोरियल में सीखने वाले है कि जावा पैकेजेस (Java Packages in Hindi) और हम इसे कैसे इस्तमाल कर सकते हैं? पैकेजों का उपयोग जावा में नामकरण संघर्षों को रोकने, पहुंच को नियंत्रित करने, खोज/पता लगाने और कक्षाओं, इंटरफेस, गणनाओं और एनोटेशन के उपयोग को आसान बनाने आदि के लिए किया जाता है।
Table of Contents
एक पैकेज को संबंधित प्रकारों (वर्गों, इंटरफेस, गणना और एनोटेशन) के समूह के रूप में परिभाषित किया जा सकता है जो एक्सेस सुरक्षा और नामस्थान प्रबंधन प्रदान करता है।
जावा में कुछ मौजूदा पैकेज हैं –
- java.lang – मौलिक वर्गों को बंडल करता है
- java.io – इनपुट के लिए कक्षाएं, आउटपुट फ़ंक्शंस इस पैकेज में बंडल किए गए हैं
प्रोग्रामर कक्षाओं/इंटरफेस इत्यादि के बंडल समूह के लिए अपने स्वयं के पैकेज को परिभाषित कर सकते हैं। यह आपके द्वारा कार्यान्वित समूह संबंधित कक्षाओं के लिए एक अच्छा अभ्यास है ताकि एक प्रोग्रामर आसानी से यह निर्धारित कर सके कि कक्षाएं, इंटरफेस, गणना और एनोटेशन संबंधित हैं।
चूंकि पैकेज एक नया नामस्थान बनाता है, इसलिए अन्य पैकेजों में नामों के साथ कोई नाम विरोध नहीं होगा। संकुल का उपयोग करना, अभिगम नियंत्रण प्रदान करना आसान है और संबंधित वर्गों का पता लगाना भी आसान है।
पैकेज बनाना (Creating a Package in Hindi)
पैकेज बनाते समय, आपको पैकेज के लिए एक नाम चुनना चाहिए और उस नाम के साथ एक पैकेज स्टेटमेंट शामिल करना चाहिए, जिसमें हर स्रोत फ़ाइल के शीर्ष पर क्लास, इंटरफेस, एन्यूमरेशन और एनोटेशन प्रकार होते हैं जिन्हें आप पैकेज में शामिल करना चाहते हैं।
पैकेज स्टेटमेंट स्रोत फ़ाइल में पहली पंक्ति होनी चाहिए। प्रत्येक स्रोत फ़ाइल में केवल एक पैकेज स्टेटमेंट हो सकता है, और यह फ़ाइल में सभी प्रकारों पर लागू होता है।
यदि पैकेज स्टेटमेंट का उपयोग नहीं किया जाता है, तो क्लास, इंटरफेस, एन्यूमरेशन और एनोटेशन प्रकार को वर्तमान Default पैकेज में रखा जाएगा।
जावा प्रोग्राम को पैकेज स्टेटमेंट के साथ संकलित करने के लिए, आपको -d विकल्प का उपयोग करना होगा जैसा कि नीचे दिखाया गया है।
javac -d Destination_folder file_name.java
फिर दिए गए पैकेज नाम वाला एक फ़ोल्डर निर्दिष्ट गंतव्य में बनाया गया है, और संकलित वर्ग फ़ाइलों को उस फ़ोल्डर में रखा जाएगा।
उदाहरण
आइए एक उदाहरण देखें जो जानवरों नामक पैकेज बनाता है। कक्षाओं और इंटरफेस के नामों के साथ किसी भी तरह के टकराव से बचने के लिए छोटे अक्षरों वाले पैकेजों के नामों का उपयोग करना एक अच्छा अभ्यास है।
निम्नलिखित पैकेज उदाहरण में जानवरों के नाम का इंटरफ़ेस शामिल है –
/* File name : Animal.java */
package animals;
interface Animal {
public void eat();
public void travel();
}
अब, उपरोक्त इंटरफेस को उसी पैकेज एनीमल में लागू करते हैं –
package animals;
/* फ़ाइल का नाम : MammalInt.java */
public class MammalInt implements Animal {
public void eat() {
System.out.println(“Mammal eats”);
}
public void travel() {
System.out.println(“Mammal travels”);
}
public int noOfLegs() {
return 0;
}
public static void main(String args[]) {
MammalInt m = new MammalInt();
m.eat();
m.travel();
}
}
अब जावा फाइलों को संकलित करें जैसा कि नीचे दिखाया गया है –
$ javac -d . Animal.java
$ javac -d . MammalInt.java
अब एनिमल्स नाम का एक पैकेज/फोल्डर वर्तमान डायरेक्टरी में बनाया जाएगा और इन क्लास फाइल्स को इसमें रखा जाएगा जैसा कि नीचे दिखाया गया है।
आप पैकेज के भीतर क्लास फाइल को निष्पादित कर सकते हैं और नीचे दिखाए अनुसार परिणाम प्राप्त कर सकते हैं।
Mammal eats
Mammal travels
इंपोर्ट कीवर्ड (The import Keyword in Hindi)
यदि एक वर्ग उसी पैकेज में दूसरी कक्षा का उपयोग करना चाहता है, तो पैकेज के नाम का उपयोग करने की आवश्यकता नहीं है। एक ही पैकेज में कक्षाएं बिना किसी विशेष सिंटैक्स के एक दूसरे को ढूंढती हैं।
उदाहरण
यहां पेरोल पैकेज में बॉस नाम का एक वर्ग जोड़ा जाता है जिसमें पहले से ही कर्मचारी होता है। बॉस तब पेरोल उपसर्ग का उपयोग किए बिना कर्मचारी वर्ग को संदर्भित कर सकता है, जैसा कि निम्नलिखित बॉस वर्ग द्वारा प्रदर्शित किया गया है।
package payroll;
public class Boss {
public void payEmployee(Employee e) {
e.mailCheck();
}
}
यदि कर्मचारी वर्ग पेरोल पैकेज में नहीं है तो क्या होगा ? बॉस क्लास को एक अलग पैकेज में क्लास को संदर्भित करने के लिए निम्नलिखित तकनीकों में से एक का उपयोग करना चाहिए।
- वर्ग के पूरी तरह से योग्य नाम का उपयोग किया जा सकता है। उदाहरण के लिए –
payroll.Employee
- पैकेज को आयात कीवर्ड और वाइल्ड कार्ड (*) का उपयोग करके आयात किया जा सकता है। उदाहरण के लिए –
import payroll.*;
आयात कीवर्ड का उपयोग करके वर्ग को ही आयात किया जा सकता है। उदाहरण के लिए –
import payroll.Employee;
नोट − एक क्लास फ़ाइल में कितनी भी संख्या में इम्पोर्ट स्टेटमेंट हो सकते हैं। पैकेज स्टेटमेंट के बाद और क्लास डिक्लेरेशन से पहले इम्पोर्ट स्टेटमेंट्स दिखाई देने चाहिए।
संकुल की निर्देशिका संरचना (The Directory Structure of Packages)
दो प्रमुख परिणाम तब होते हैं जब एक वर्ग को एक पैकेज में रखा जाता है –
- पैकेज का नाम क्लास के नाम का एक हिस्सा बन जाता है, जैसा कि हमने अभी पिछले भाग में variables्चा की थी।
- पैकेज का नाम निर्देशिका संरचना से मेल खाना चाहिए जहां संबंधित बायटेकोड रहता है।
यहाँ जावा में अपनी फ़ाइलों के प्रबंधन का सरल तरीका है –
एक पाठ फ़ाइल में एक वर्ग, इंटरफ़ेस, गणना या एनोटेशन प्रकार के लिए स्रोत कोड रखें जिसका नाम प्रकार का सरल नाम है और जिसका विस्तार .java है।
उदाहरण के लिए –
// फ़ाइल का नाम : Car.java
package vehicle;
public class Car {
// Class implementation.
}
अब, स्रोत फ़ाइल को एक निर्देशिका में रखें जिसका नाम उस पैकेज के नाम को दर्शाता है जिससे वर्ग संबंधित है –
….\vehicle\Car.java
अब, योग्य वर्ग का नाम और पथनाम इस प्रकार होगा –
Class name → vehicle.Car
Path name → vehicle\Car.java (in windows)
सामान्य तौर पर, एक कंपनी अपने उलटे इंटरनेट डोमेन नाम का उपयोग अपने पैकेज नामों के लिए करती है।
उदाहरण − एक कंपनी का इंटरनेट डोमेन नाम apple.com है, तो उसके सभी पैकेज नाम com.apple से शुरू होंगे। पैकेज नाम का प्रत्येक घटक एक subdirectory से मेल खाता है।
उदाहरण − कंपनी के पास एक com.apple.कंप्यूटर पैकेज था जिसमें एक Dell.java स्रोत फ़ाइल थी, यह इस तरह की subdirectory की एक श्रृंखला में समाहित होगी −
….\com\apple\computers\Dell.java
संकलन के समय, संकलक प्रत्येक वर्ग, इंटरफ़ेस और उसमें परिभाषित गणना के लिए एक अलग आउटपुट फ़ाइल बनाता है। आउटपुट फ़ाइल का मूल नाम प्रकार का नाम है, और इसका विस्तार .class है।
उदाहरण के लिए –
// फ़ाइल का नाम: Dell.java
package com.apple.computers;
public class Dell {
}
class Ups {
}
अब, -d विकल्प – का उपयोग करके इस फ़ाइल को निम्नानुसार संकलित करें
$javac -d . Dell.java
फाइलें निम्नानुसार संकलित की जाएंगी –
.\com\apple\computers\Dell.class
.\com\apple\computers\Ups.class
आप \com\apple\computers\ में परिभाषित सभी वर्गों या इंटरफेस को निम्नानुसार आयात कर सकते हैं –
import com.apple.computers.*;
.Java स्रोत फ़ाइलों की तरह, संकलित .class फ़ाइलें निर्देशिकाओं की एक श्रृंखला में होनी चाहिए जो पैकेज नाम को दर्शाती हैं। हालाँकि, .class फ़ाइलों का पथ .java स्रोत फ़ाइलों के पथ के समान नहीं होना चाहिए। आप अपने स्रोत और वर्ग निर्देशिकाओं को अलग-अलग व्यवस्थित कर सकते हैं, जैसे –
<path-one>\sources\com\apple\computers\Dell.java
<path-two>\classes\com\apple\computers\Dell.class
ऐसा करने से, आपके स्रोतों को प्रकट किए बिना अन्य प्रोग्रामरों को कक्षा निर्देशिका तक पहुंच देना संभव है। आपको इस तरीके से स्रोत और क्लास फाइलों को प्रबंधित करने की भी आवश्यकता है ताकि कंपाइलर और जावा वर्चुअल मशीन (जेवीएम) आपके प्रोग्राम द्वारा उपयोग किए जाने वाले सभी प्रकारों को ढूंढ सकें।
क्लासेस डायरेक्टरी का पूरा पाथ, <path-two>\classes, क्लास पाथ कहलाता है, और CLASSPATH सिस्टम वेरिएबल के साथ सेट होता है। कंपाइलर और JVM दोनों ही क्लास पाथ में पैकेज का नाम जोड़कर आपकी .class फ़ाइलों के लिए पथ का निर्माण करते हैं।
कहो <path-two> \ वर्ग वर्ग पथ है, और पैकेज का नाम com.apple.computers है, तो संकलक और JVM <path-two> \ वर्ग \ कॉम \ सेब \ कंप्यूटर में .class फ़ाइलों की तलाश करेंगे।
एक वर्ग पथ में कई पथ शामिल हो सकते हैं। एकाधिक पथ अर्धविराम (विंडोज़) या कोलन (यूनिक्स) द्वारा अलग किए जाने चाहिए। Default रूप से, कंपाइलर और JVM वर्तमान निर्देशिका और JAR फ़ाइल को जावा प्लेटफ़ॉर्म क्लासेस में खोजते हैं ताकि ये निर्देशिकाएँ स्वचालित रूप से क्लास पथ में हों।
CLASSPATH सिस्टम variables सेट करें (Set CLASSPATH System Variable)
वर्तमान CLASSPATH वेरिएबल को प्रदर्शित करने के लिए, Windows और UNIX (bourne shell) में निम्न कमांड का उपयोग करें –
- In Windows → C:\> set CLASSPATH
- In UNIX → % echo $CLASSPATH
CLASSPATH variables की वर्तमान सामग्री को हटाने के लिए उपयोग करें
- In Windows → C:\> set CLASSPATH =
- In UNIX → % unset CLASSPATH; export CLASSPATH
CLASSPATH वेरिएबल सेट करने के लिए –
- In Windows → set CLASSPATH = C:\users\jack\java\classes
- In UNIX → % CLASSPATH = /home/jack/java/classes; export CLASSPATH
हम उम्मीद करते है कि आपको “जावा पैकेजेस (Java Packages in Hindi)” से सम्बंधित जानकारी हिंदी में समझ में आयी होंगी यदि आपको बताई गई जानकारी अच्छी लगी हो तो अपने दोस्तों में ऐसे शेयर करे जिससे उनकी भी हेल्प हो सके धन्यवाद!