1. संकुल

साधारण जावा प्रोग्राम में बड़ी संख्या में कक्षाएं शामिल होती हैं। कितने? हजारों, दसियों हजार। और यदि आप इस तथ्य को भी ध्यान में रखते हैं कि कार्यक्रम अन्य प्रोग्रामर द्वारा लिखी गई कक्षाओं वाले विभिन्न पुस्तकालयों का उपयोग करता है, तो कक्षाओं की संख्या लाखों में आसानी से मापी जा सकती है!

इन सभी लाखों, या यहां तक ​​कि सिर्फ हजारों वर्गों के लिए अद्वितीय नामों के साथ आना लगभग असंभव होगा।

बेशक, हम A123और जैसे नामों की कल्पना कर सकते B345हैं, लेकिन अगर हम एक अच्छे वर्ग के नाम को चुनने के बारे में बात कर रहे हैं, जो वर्ग को समझने में आसान बनाता है (जैसे Stringस्ट्रिंग्स के लिए, उदाहरण के लिए), तो एक हजार अद्वितीय नाम भी बनाना बहुत कुछ है काम का।

यही कारण है कि जावा में पैकेज कीवर्ड का उपयोग करके कक्षाओं को पैकेज में समूहित करना प्रथागत है।

जावा क्लासेस और उनके पैकेज कंप्यूटर पर फाइलों और फ़ोल्डरों के समान हैं।

उदाहरण के लिए, यदि आपको अपने कंप्यूटर पर 10 दस्तावेज़ों को संग्रहित करने की आवश्यकता है, तो आप शायद उन्हें केवल एक फ़ोल्डर में रखेंगे। लेकिन क्या होगा यदि आपके पास हजारों दस्तावेज़ हैं (उदाहरण के लिए, कंपनी के सभी दस्तावेज़ों का भंडार)?

संग्रहीत किए जाने वाले हजारों दस्तावेज़ों के साथ, एक समाधान यह है कि अच्छे वर्णनात्मक नामों के साथ फ़ोल्डरों के कई स्तरों का निर्माण किया जाए। और फिर अंतिम स्तर पर एक फ़ोल्डर में, उस विशेष फ़ोल्डर से संबंधित दस्तावेज़ों को संग्रहीत करें। दस्तावेज़ों के लिए अच्छे वर्णनात्मक नाम भी चोट नहीं पहुँचाते हैं।

वास्तव में, हम यह सब जावा में कक्षाओं के लिए करते हैं।

कक्षाओं वाली फाइलें विभिन्न निर्देशिकाओं (फ़ोल्डरों) में संग्रहीत की जाती हैं, और इसके सभी सबफ़ोल्डर्स के साथ वर्ग के फ़ोल्डर का पूरा नाम पैकेज का नाम है। उदाहरण:

फ़ाइल का पथ पैकेज का नाम कक्षा का नाम
\com\codegym\tasks\Solution.java
com.codegym.tasks
Solution
\com\io\FileInputStream.java
com.io
FileInputStream
\java\util\ArrayList.java
java.util
ArrayList

फ़ोल्डर नामों के विपरीत, पैकेज के नाम एक बिंदु को सीमांकक के रूप में उपयोग करते हैं। दूसरे शब्दों में, फ़ोल्डर पैकेज \com\codegym\tasks\से मेल खाता है ।com.codegym.tasks


2. srcफोल्डर

जावा में, एक प्रोग्राम के लिए सभी वर्गों को एक फ़ोल्डर (और सबफ़ोल्डर) में संग्रहीत करने की प्रथा है। इस फ़ोल्डर को आमतौर पर src( स्रोत के लिए संक्षिप्त ) कहा जाता है।

इस फ़ोल्डर को प्रोजेक्ट रूट (या स्रोत रूट ) कहा जाता है, और सभी पैकेज पथ इसके सापेक्ष होते हैं। उदाहरण:

फ़ोल्डर पैकेज का नाम
c:\projects\data\my\src\com\codegym\tasks\
com.codegym.tasks
d:\files\git\data\project\src\com\codegym\tasks\
com.codegym.tasks

इस स्थिति में, प्रोग्रामर कुछ इस तरह कहते हैं "हमारे पास नाम का एक प्रोजेक्ट है my, जो फ़ोल्डर में स्थित है c:\projects\data" या "हमारे पास एक प्रोजेक्ट नाम है project, जो फ़ोल्डर में स्थित है d:\files\git\data"

कक्षाओं को हमेशा संकुल में रखना सबसे अच्छा होता है न कि सीधे रूट फोल्डर में ( src. यदि आपके पास कुछ ही कक्षाएं हैं, तो यह कोई समस्या नहीं है। लेकिन जब कई कक्षाएं होती हैं, तो भ्रमित होना बहुत आसान होता है। इसलिए , हमेशा अपनी कक्षाएं केवल संकुल में बनाएं।

जावा में, कक्षाओं और पैकेजों को अर्थपूर्ण नाम देने की प्रथा है। कई कंपनियां अपने स्वयं के पुस्तकालय (कक्षाओं का एक सेट) जारी करती हैं और भ्रम से बचने के लिए, वे पैकेज के नाम में कंपनी/वेबसाइट/परियोजना का नाम शामिल करती हैं:

पैकेज का नाम कंपनी/परियोजना का नाम
org.apache.common
org.apache.tomcat
org.apache.util
अपाचे परियोजना
com.oracle.jdbc
ओरेकल कंपनी
java.io
javax.servlet
Oracle कंपनी, Java प्रोजेक्ट
com.ibm.websphere
IBM कंपनी, WebSphere प्रोजेक्ट
com.jboss
जेबीएसएस परियोजना

3. फ़ाइल सामग्री

जावा भाषा मानक के अनुसार, कोड के साथ फ़ाइल में एक वर्ग के नाम और उसके पैकेज के नाम के बारे में जानकारी शामिल होनी चाहिए। सामान्य रूप नीचे दिखाया गया है:

package package-name;

public class ClassName
{

}

पैकेज का नाम फ़ोल्डर के नाम से मेल खाना चाहिए, और फ़ाइल का नाम सार्वजनिक वर्ग के नाम से मेल खाना चाहिए।

यदि आपके पास कोई फ़ाइल है, तो उसमें यह होना चाहिए:...\src\com\project\Service.java

package com.project;

public class Service
{

}

4. कक्षाएं आयात करना

वर्ग का नाम और पैकेज का नाम वर्ग का पूर्णतः योग्य नाम कहलाता है ।

उदाहरण:

पूरी तरह से योग्य नाम पैकेज का नाम कक्षा का नाम
java.io.FileInputStream
java.io
FileInputStream
java.lang.String
java.lang
String
java.util.ArrayList
java.util
ArrayList
org.apache.tomcat.Servlet
org.apache.tomcat
Servlet
Cat
कोई नहीं
Cat

अच्छी खबर:

एक परियोजना के भीतर पूरी तरह से योग्य वर्ग का नाम हमेशा अद्वितीय होता है। आखिरकार, आप एक ही फोल्डर में एक ही नाम से दो फाइलें नहीं बना सकते।

बुरी ख़बरें:

पूरी तरह से योग्य वर्ग के नाम आमतौर पर लंबे या बहुत लंबे होते हैं। और कोड में हर बार एक लंबा नाम (उदाहरण के लिए java.util.ArrayList) लिखना बेहद असुविधाजनक है।

यही कारण है कि जावा ने कक्षाओं को आयात करने की क्षमता को जोड़ा ।

आप अपने कोड में कक्षा के संक्षिप्त नाम का उपयोग कर सकते हैं , लेकिन आपको पहले संकलक को यह बताना होगा कि कौन सा पूर्णतः योग्य वर्ग नाम संक्षिप्त नाम से मेल खाता है । क्या होगा यदि अब आप अपनी परियोजना में एक ही नाम के साथ कई वर्ग हैं? या आपके पास मूल रूप से एक है, लेकिन फिर 15 और जोड़े गए...

अपने कोड में एक छोटे वर्ग के नाम का उपयोग करने के लिए, आपको निम्नलिखित निर्माण जोड़ना होगा:

import fully-qualified-class-name;

packageघोषणा के ठीक बाद, इस घोषणा को कक्षा की शुरुआत में जोड़ा जाना चाहिए ।

उदाहरण:

package com.codegym.tasks.task01;

import java.util.Scanner;
import com.test.helper.special.ArrayList;

public class Solution
{
   public static void main(String[] args)
   {
     Scanner console = new Scanner(System.in);
     ArrayList list = new ArrayList();
   }
}

हमने दो वर्गों ( और ) को आयात किया है , इसलिए हम अपने कोड में उनके छोटे नामों का उपयोग कर सकते हैं। और कंपाइलर को पता चल जाएगा कि किन वर्गों का उपयोग करना है।java.util.Scannercom.test.helper.special.ArrayList

और अगर हमने इस्तेमाल नहीं किया होता तो वही कोड इस तरह दिखेगा import:

package com.codegym.tasks.task01;

public class Solution
{
   public static void main(String[] args)
   {
     java.util.Scanner console = new java.util.Scanner(System.in);
     com.test.helper.special.ArrayList list = new com.test.helper.special.ArrayList();
   }
}

वैसे, यदि आपके प्रोजेक्ट में दो वर्ग नाम हैं Scanner, तो आप उन दोनों को एक ही फ़ाइल में आयात नहीं कर पाएंगे: आपको उनमें से एक के लिए लंबे नाम का उपयोग करना होगा ।

मान लीजिए कि आपकी टीम में एक जेन है। संचार की कोई समस्या नहीं है, क्योंकि हर कोई जानता है कि वह कौन है। लेकिन अगर तीन जेन थे, तो उन्हें अलग करने के लिए पूरी तरह से योग्य नामों का इस्तेमाल करना होगा।

नोट 1

वैसे, यदि आप अपनी कक्षा में बहुत सारे आयात विवरण जोड़ने के लिए बहुत आलसी हैं, तो आप इसके आलसी संस्करण का उपयोग कर सकते हैं: एक विशिष्ट वर्ग के नाम के बजाय, एक तारांकन चिह्न लगाएं:

import package-name.*;

यह आपको पैकेज में सभी वर्गों के संक्षिप्त नामों का उपयोग करने की अनुमति देगा ।

नोट 2

पैकेज में सभी वर्ग स्वचालित रूप से आयात किए जाते हैं, इसलिए आपको उनके लिए java.langकोई कथन लिखने की आवश्यकता नहीं है। importआप इन वर्गों में से एक को पहले से ही जानते हैं: java.lang.String. हाँ यह सही है। यह वह Stringवर्ग है जिसका उपयोग हमने स्ट्रिंग्स के साथ काम करने के लिए किया है।