Create Package in Java: जावा के Packages को हम Subdirectory के रूप में भी मान सकते हैं, जिसमें आपस में Related विभिन्न प्रकार की Classes एक Group के रूप में Stored होती हैं। उदाहरण के लिए यदि हम जावा की awt Packages की बात करें, तो ये एक Subdirectory है, जिसमें Java में GUI Create करने से सम्बंधित विभिन्न प्रकार की Classes Stored हैं।
जावा का Compiler जावा के विभिन्न Built-In Packages को यानी आपस में Related Classes के समूह को एक Subfolder के रूप में Store करता है और जब हम जावा के Program को Compile व Run करते हैं, तब जावा के Compiler व Interpreter को पता होता है, कि उसे जावा के Built – In Packages को कहां से Access करना है।
यदि हम सरल भाषा में कहें तो जावा Package आपस में Related Classes का एक समूह मात्र होता है। इसलिए जावा के हर Built-In Package का एक Subfolder होता है, जिसमें जावा की विभिन्न Built-In Classes Stored होती हैं।
जावा के विभिन्न Packages के Subfolders src नाम की एक Zip File के रूप में होते हैं और ये Zip File JDK नाम के उस Folder में Stored होती है, जो Folder जावा को Install करते समय “C:” Drive पर बनता है। इस Zip File को Extract करके हम जावा के विभिन्न Built-In Packages में Stored विभिन्न Related Classes के समूह को देख सकते हैं।
चूंकि जावा का हर Package एक Subfolder होता है, जिसमें किसी एक विष; से सम्बंधित Classes का समूह होता है, इसलिए यदि हम भी हमारी स्वं; की Classes के समूह को एक Package के रूप में Group करना चाहते हैं, तो हमें भी एक Subfolder बनाना होता है, जिसमें विभिन्न प्रकार की आपस में Related Class Files के समूह को Store करना होता है।
जब भी हम जावा में कोई Professional Program Create करना चाहते हैं, तो हम अपने Program से सम्बंधित विभिन्न प्रकार की Java Source Files Create करते हैं और इन Source Files को किसी ना किसी Folder में Save करते हैं।
जब जावा इन Source Files को Compile करते हैं, तब इनकी Class File Create होती है, जिन्हें जावा Interpreter Execute करता है। अब यदि हम इन Create की जाने वाली Source Files में से कुछ आपस में Logically Related Files को किसी Package के रूप में Group करना चाहते हैं, तो जिस Folder में हम इन Source Files को Save करते हैं, उसी Folder में हमें एक Sub Folder बनाना होता है और इस Sub Folder का नाम वही होना चाहिए, जो नाम हम हमारे Package का रखना चाहते हैं।
चूंकि जावा एक Case Sensitive Language है, इसलिए Folder का नाम भी Case Sensitive नियम के अन्तर्गत ही रखना होता है और जब हम इस Folder के नाम को एक Package के रूप में अपने Program में Use करना चाहते हैं, तब भी हमें Package का वही नाम Use करना पडता है, जो नाम हमने अपने Subfolder का दिया है। चलिए, इस Concept को एक उदाहरण द्वारा समझते हैं।
मानलो कि हमने JDK Install किया है। जब हम JDK को उसकी Default Location पर Install करते हैं, तब वह “C:” पर Install होता है। अब मानलो कि हम हमारे Program से सम्बंधित जावा Source Files को इसी JDK में MyApplication नाम का एक Sub Folder Create करके उसमें Save करते हैं।
अब मानलो कि हम हमारी कुछ Files का एक Package Create करना चाहते हैं और Package का नाम myFirstPackage रखना चाहते हैं। इस स्थिति में हमें MyApplication नाम के Folder में myFirstPackage नाम का एक Folder Create करना होगा।
ध्यान रहे कि हमने इस नाम में जिस तरह से Case को Use किया है, उसी तरह के Case को हमें हमारी Program File में इस Package की Classes को Access करने के लिए भी Use करना होगा। Folder Create करने के बाद में अब हमें उन Source Files को Create करना होता है, जिन्हें हम अपने Package में Store करना चाहते हैं।
जब हमें किसी Class को किसी Package में Store करना होता है, तब उस Class की File में सबसे पहले हमें उस Package का उल्लेख करना होता है, जिसमें हम Class को Store करना चाहते हैं। मानलो कि हमें MyApplication Folder के myFirstPackage Subfolder में MyFirstClass नाम की Class को Store करना है। इस Class को myFirstPackage में Store करने के लिए जब हम MyFirstClass Class को Define करते हैं, तो Class File में सबसे पहले Statement के रूप में हमें ये बताना होता है कि हम Create की जाने वाली Class को किस Package में Store करना चाहते हैं। जावा Compiler को Package की Information देने के लिए हमें निम्नानुसार package Keyword Statement का प्रयोग करना होता है:
package myFirstPackage;
अब जिस Class को हमें myFirstPackage में Store करना है, उस Class को हमें इस Statement के बाद में Define करना होता है। यानी
// File Name : MyFirstClass.java // Save In : C:\JDK\MyApplication\myFirstPackage package myFirstPackage; class MyFirstClass { void printHello() { System.out.println(“Hello”); } }
हम देख सकते हैं कि हमने Class के साथ किसी Access Specifier का प्रयोग नहीं किया है। यदि हम हमारी Class के साथ किसी Access Specifier का प्रयोग नहीं करते हैं, तो हमारी Class केवल myFirstPackage में स्थित विभिन्न Classes के लिए ही Accessible होगी। यदि कोई अन्य Class Program इस Class को Use करना चाहेगा, तो वह इस Class को Use नहीं कर पा,गा। इसलिए हमें इस Class के साथ public Access Specifier का प्रयोग करना होगा। जब हम इसके साथ public Access Specifier का प्रयोग करेंगे, तब इस Package की किसी भी Public Class को किसी भी दूसरे Package की कोई भी Class Access करने में सक्षम होगी।
इसी तरह से यदि हम Class के Method के साथ भी किसी Access Specifier का प्रयोग नहीं करेंगे, तो हमारी Class के Methods केवल उसी Package तक ही Accessible रहेंगे। इसलिए हमें हमारी Class के Member Methods के साथ भी public Access Specifier का प्रयोग करना होगा। यानी हमें इस Code Segment में निम्नानुसार Modification करना होगा:
// File Name : MyFirstClass.java // Save In : C:\JDK\MyApplication\myFirstPackage package myFirstPackage; public class MyFirstClass { public void printHello() { System.out.println(“Hello”); } }
अब यदि हम myFirstPackage Package में स्थित MyFirstClass के Object Create करके Use करना चाहें, तो इसके लिए हम निम्नानुसार एक main() Method Class Create कर सकते हैं:
// File Name : UsingMyFirstClass.java // Save In : C:\JDK\MyApplication import myFirstPackage.*; public class UsingMyFirstClass { public static void main(String args[]) { MyFirstClass myObject = new MyFirstClass(); myObject.printHello(); } }
हम देख सकते हैं कि हमने Package में Add की जाने वाली Class को तो MyApplication Folder के myFirstPackage नाम के Sub Folder में Save करके Compile किया है, जबकि UsingMyFirstClass वाली Source File को MyApplication नाम के Folder में Save किया है।
हमने ऐसा इसलिए किया है क्योंकि किसी भी Package में कभी भी main() Method वाली Class को Store नहीं किया जा सकता है, क्योंकि main() Method की Class Directly Run होने वाली Class होती है। myFirstPackage Class में हम उसी Class को Store कर सकते हैं, जिसमें हम myFirstPackage से Directly दूसरे जावा Programs में Access करना चाहते हैं। myFirstPackage नाम के Folder में Store होने वाली Classes एक तरह से Library Classes बन जाती हैं, जिन्हें Directly किसी भी Source File में Import करके Use किया जा सकता है।
इस Program में हमने import Statement द्वारा myFirstPackage Package की सभी Classes को निम्नानुसार Statement द्वारा UsingMyFirstClass नाम की Source File में Import किया है:
import myFirstPackage.*;
इस Statement से myFirstPackage में Stored सभी Classes हमारे Program के लिए Accessible हो जाती हैं। जबकि यदि हम केवल MyFirstClass नाम की Class को ही इस Package से अपने Program में Access करना चाहते हैं, तो हम निम्नानुसार import Statement भी लिख सकते हैं:
import myFirstPackage.MyFirstClass;
इस Program में हम देख सकते हैं कि हमने MyFirstClass नाम की Class को myFirstPackage नाम के Package में Store किया है और हमारी Current Source File में ये Class Defined नहीं है, फिर भी हम main() Method में निम्नानुसार Statement द्वारा इस Class के Object Create कर पा रहे हैं और उस Object के Reference में printHello() नाम के Method को भी Access कर पा रहे हैं, जो कि MyFirstClass का Method है।
ऐसा इसीलिए सम्भव है, क्योंकि ये Class हमें myFirstPackage नाम के Package से प्राप्त हो रही है। यदि हम चाहें तो अब इस Package को किसी भी अन्य Program में import Statement द्वारा Use कर सकते हैं। साथ ही हम इस Package में और Classes भी Add कर सकते हैं।
इसके लिए हमें केवल इतना ही करना होगा कि जिस किसी भी Class को हम इस Package में Store करना चाहते हैं, उस Package को हमें public बनाना होगा और उस Class से पहले हमें package Statement द्वारा ये बताना होगा कि हम हमारी Class को किस Package में Store करना चाहते हैं।
इसी तरह से जब हमें उस Package की Class को Access करना होगा, तब हमें import Statement द्वारा उस Package को या उस Package की किसी Class को अपनी Source File में Import करना होगा। यानी यदि हम चाहें तो निम्नानुसार एक और Class इस Package में Store कर सकते हैं:
// File Name : MySecondClass.java // Save In : C:\JDK\MyApplication\myFirstClass package myFirstPackage; public class MySecondClass { public void printBuy() { System.out.println("Huy and Buy"); } }
इस Class को भी myFirstPackage Folder में Save करके Compile करने पर इस Package में इसकी भी Class File Create हो जाती है। अब हम निम्नानुसार एक main() Method Program में इस Package की दोनों Classes के Objects Create करके उन्हें Use कर सकते हैं:
// File Name : UsingMyFirstClass.java // Save In : C:\JDK\MyApplication import myFirstPackage.*; //For importing all classes of the package public class UsingMyFirstClass { public static void main(String args[]) { MyFirstClass myObject1 = new MyFirstClass(); MySecondClass myObject2 = new MySecondClass(); myObject1.printHello(); myObject2.printBuy(); } } // Output Hello Huy and Buy
एक बात ध्यान रखें कि हम जिस Package को Create कर रहे हैं, वह Package Directory उस Directory की Subdirectory होनी चाहिए, जिसमें हम उस Create की जाने वाली Package की Classes को Import करने वाली Source Files को Save करेंगे। यदि हम उन Source Files को किसी दूसरी Directory में Store करते हैं, जहां Import की जाने वाली Package की Subdirectory उपलब्ध नहीं है, तो हम उस Package को अपने Source Program में Use नहीं कर सकते हैं।
सरल शब्दों में कहें तो जिस Source File में हम Package को Use कर रहे हैं, वह Package Directory Source Files की Directory की Subdirectory होनी चाहिए। यदि हम Packages की Hierarchy Create करना चाहते हैं, तो Package की Hierarchy की Files को Access करने के लिए हमें Dot Operator का प्रयोग करना पडता है।
मानलो कि हमारी myFirstPackage में एक और Sub Package mySecondPackage है, तो इस Package की Subdirectory को हमें myFirstPackage की Subdirectory में Create करना होगा और इस Sub Package में Classes को Save करके Compile करना होगा। Class Files को Sub Package में भेजने के लिए हमें निम्नानुसार Statement लिखना होगा:
// File Nam : MyThirdClass.java // Save In : C:\JDK\MyApplication\myFirstPackage\mySecondPackage package myFirstPackage.mySecondPackage; public class MyThirdClass { public void printOK() { System.out.println(“OK”); } }
इसी तरह से किसी Sub Package की Class को Access करने के लिए भी हमें निम्नानुसार Dot Operator का प्रयोग करके Classes को अपनी Source File में import करना होता है:
// File Name : UsingMyFirstClass.java // Save In : C:\JDK\MyApplication import myFirstPackage.mySecondPackage.*; public class UsingMyThirdClass { public static void main(String args[]) { MyThirdClass myObject3 = new MyThirdClass(); myObject3.printOK(); } }
हम एक ही Class Definition File में एक से ज्यादा Classes को Define करके उसे किसी Package में Store कर सकते हैं। ऐसे में उस Class Definition File में केवल एक ही public Class होती है और जो Class Public होती है, Class Definition File का नाम भी वही होता है, जो उस Public Class का होता है।
यानी यदि हम उपरोक्त तीनों Classes को एक ही बार में एक ही Class Definition File द्वारा myFirstPackage Package में Store करना चाहें, तो निम्न Class File को myFirstPackage में Save करके ये काम कर सकते हैं:
// File Name : MyFirstClass.java // Save In : C:\JDK\MyApplication\myFirstPackage package myFirstPackage; public class MyFirstClass{ public void printHello(){ System.out.println("Hello"); } } class MySecondClass{ public void printBuy(){ System.out.println("Huy and Buy"); } } class MyThirdClass{ public void printOK(){ System.out.println("OK"); } }
जैसाकि हम इस Class File में देख सकते हैं, इसमें केवल एक ही Public Class है। इसलिए यदि हम Packages के अलावा किसी अन्य Class में MyThirdClass का Object Create करना चाहें, तो नहीं कर सकते हैं, क्योंकि ये Public नहीं है। MyThirdClass को Public Form में Package में Add करने के लिए हमें MyThirdClass को Package में अलग से Store करना होगा और इसके लिए अलग से Class File बनानी होगी। Access Specifier के सम्बंध में हमें हमेंशा सावधान रहना चाहिए। हम किसी Package की Public Classes को ही किसी Outside Package Class में Directly Access कर सकते हैं।
Package हमेंशा एक Container की तरह काम करता है, इसलिए इसकी Classes को यदि हमें अन्य Classes में Use करना है, तो Package की इन Classes का Public होना जरूरी होता है। जो Classes Public नहीं होती हैं, उन्हें केवल उसी Package की अन्य Classes द्वारा ही Access किया जा सकता है।
Packages का प्रयोग हमेंशा Classes व अन्य Sub Packages को Store करने के लिए एक Container की तरह किया जाता है। जबकि Classes का प्रयोग Data Members व Methods को Store करने के लिए किया जाता है। इसलिए Class Members के साथ private, protected, public या Default Access Specifier का प्रयोग किया जा सकता है।
जब हम पिछले उदाहरण की तरह एक ही File से कई Classes को Package में Add करते हैं, तब Public Class के अलावा सभी Classes केवल उसी Package की अन्य Classes के लिए ही Accessible होती हैं और ये Classes Package से बाहर की Classes के लिए Hidden रहती हैं। इसलिए हम किसी ऐसी Class में इनके Object Create नहीं कर सकते हैं, जो इस Package से बाहर हो।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Java in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
Java Programming Language in Hindi | Page: 682 | Format: PDF