Codegym यूनिवर्सिटी कोर्स के भाग के रूप में एक परामर्शदाता के साथ एक व्याख्यान स्निपेट। पूर्ण पाठ्यक्रम के लिए साइन अप करें।
"नमस्कार, अमीगो! मैंने सुना है कि आपको पहले से ही तरीकों की अच्छी समझ है?"
"हाय, ऋषि। हाँ, मैंने पहले ही उस शिक्षक की चाल से अपना रास्ता काट लिया है। मैं कहूँगा कि यह इतना बुरा नहीं था, लेकिन तुम मुझसे कहोगे, 'नहीं, नहीं! तुमने कुछ भी नहीं निकाला। '"
"आप स्पष्ट रूप से डिएगो के साथ कुछ शिक्षकों के साथ बातचीत करने में बहुत अधिक समय व्यतीत कर रहे हैं। वैसे भी ... मुझे अभी भी आशा है कि आप विधियों को अच्छी तरह से समझेंगे। आखिरकार, आज मैं आपको कुछ जादुई शब्द सिखाने जा रहा हूँ जो विधियों को चित्रित करने में मदद करते हैं प्रभाव के क्षेत्र।"
"दिलचस्प लगता है।"
"वास्तव में, यह सब सरल है। प्रत्येक विधि से पहले, प्रोग्रामर तथाकथित एक्सेस संशोधक निर्दिष्ट कर सकते हैं। इनमें निम्नलिखित कीवर्ड शामिल हैं: public
, protected
, private
।
"ये एक्सेस संशोधक आपको अन्य वर्गों की पहुंच को एक विधि तक सीमित करने देते हैं।
"उदाहरण के लिए, यदि आप private
किसी मेथड डिक्लेरेशन से पहले कीवर्ड लिखते हैं, तो मेथड को केवल उसी क्लास से कॉल किया जा सकता है जिसमें यह घोषित किया गया है। कीवर्ड public
किसी भी क्लास के किसी भी मेथड से मार्क्ड मेथड तक पहुंच की अनुमति देता है।
कुल 3 ऐसे संशोधक हैं, लेकिन एक विधि में 4 प्रकार की पहुंच है। ऐसा इसलिए है क्योंकि एक्सेस संशोधक की अनुपस्थिति का भी कुछ अर्थ है। यहाँ एक पूर्ण तालिका है:
से पहुंच... | ||||
---|---|---|---|---|
संशोधक | कोई भी वर्ग | बाल वर्ग | इसका पैकेज | इसका वर्ग |
public |
हाँ | हाँ | हाँ | हाँ |
protected |
नहीं | हाँ | हाँ | हाँ |
कोई संशोधक नहीं | नहीं | नहीं | हाँ | हाँ |
private |
नहीं | नहीं | नहीं | हाँ |
"और यहाँ पहुँच संशोधक की पूरी व्याख्या है:
1. public
संशोधक
संशोधक के साथ चिह्नित एक विधि (या चर, या वर्ग) को प्रोग्राम में कहीं से भीpublic
एक्सेस किया जा सकता है । यह खुलेपन की उच्चतम डिग्री है — इसमें कोई प्रतिबंध नहीं है।
2. private
संशोधक
संशोधक के साथ चिह्नित एक विधि (या चर, या वर्ग) को private
केवल उसी वर्ग से पहुँचा जा सकता है जहाँ इसे घोषित किया गया है । अन्य सभी वर्गों के लिए चिह्नित विधि (या चर) अदृश्य है। यह ऐसा है जैसे यह मौजूद नहीं है। यह प्रतिबंध का उच्चतम स्तर है — केवल उसका अपना वर्ग।
3. कोई संशोधक नहीं (डिफ़ॉल्ट संशोधक)
यदि कोई विधि (या चर) किसी भी संशोधक के साथ चिह्नित नहीं है, तो इसे 'डिफ़ॉल्ट संशोधक' माना जाता है। उस संशोधक के साथ चर या विधियाँ (अर्थात बिना किसी के) पैकेज में सभी वर्गों के लिए दृश्यमान हैं जिसमें वे घोषित किए गए हैं । और केवल उन्हें। इस संशोधक को कभी-कभी कहा जाता है package-private
, यह संकेत देते हुए कि चर और विधियों तक पहुंच पूरे पैकेज के लिए खुली है जिसमें उनकी कक्षा स्थित है।
4. protected
संशोधक
यदि किसी विधि को protected
संशोधक के साथ चिह्नित किया गया है, तो उसे उसी वर्ग, उसी पैकेज और वंशजों से पहुँचा जा सकता है (वे वर्ग जो उस वर्ग को प्राप्त करते हैं जिसमें विधि घोषित की गई है)। हम जावा कोर खोज में इस विषय का अधिक विस्तार से विश्लेषण करेंगे।"
"दिलचस्प, लेकिन मुझे यकीन नहीं है कि मैं इन संशोधकों को तुरंत सभी सही स्थानों पर रख सकता हूं।
"आप वहां धीरे-धीरे पहुंचेंगे। समय से पहले चिंता करने की कोई जरूरत नहीं है। जब तक आप जावा सिंटैक्स खोज के अंत तक नहीं पहुंच जाते, तब तक आप public
अपने सभी तरीकों (साथ ही कक्षाओं और आवृत्ति चर) पर संशोधक का उपयोग कर सकते हैं। आपको इसकी आवश्यकता होगी अन्य संशोधक जब हम सक्रिय रूप से ओओपी सीखना शुरू करते हैं।"
"क्या आप अधिक विस्तार से बता सकते हैं कि एक्सेस संशोधक की आवश्यकता क्यों है?"
"वे दसियों और सैकड़ों प्रोग्रामर द्वारा एक ही समय में लिखी गई बड़ी परियोजनाओं के लिए आवश्यक हो जाते हैं।
"कभी-कभी ऐसी परिस्थितियां होती हैं जब एक प्रोग्रामर अत्यधिक बड़ी विधि को भागों में विभाजित करना चाहता है और कोड के भाग को सहायक विधियों में स्थानांतरित करना चाहता है। लेकिन साथ ही, वह नहीं चाहता कि अन्य प्रोग्रामर इन सहायक विधियों को कॉल करें, क्योंकि संबंधित कोड ठीक से काम नहीं कर सकता है।"
"तो वे इन एक्सेस संशोधक के साथ आए। यदि आप निजी शब्द के साथ एक सहायक विधि को चिह्नित करते हैं , तो आपकी कक्षा के अलावा कोई भी कोड आपकी सहायक विधि को नहीं देख सकता है।"
"मुझे लगता है मुझे समझ में आ गया।"
static
कीवर्ड
"एक और दिलचस्प कीवर्ड है। यह है static
। अप्रत्याशित रूप से, यह विधियों को स्थिर बनाता है।"
"इसका क्या मतलब है?"
"मैं आपको इसके बारे में और बाद में बताऊँगा। चिंता न करें। अभी के लिए, स्थैतिक तरीकों के बारे में कुछ तथ्यों को याद करने का प्रयास करें।
तथ्य 1। एक स्थिर विधि किसी वस्तु से जुड़ी नहीं है, बल्कि उस वर्ग से संबंधित है जिसमें इसे घोषित किया गया है। स्थैतिक विधि को कॉल करने के लिए, आपको लिखना होगा:
ClassName.MethodName()
स्थैतिक तरीकों के उदाहरण:
कक्षा का नाम | स्थैतिक विधि का नाम | |
---|---|---|
Thread.sleep() |
Thread |
sleep() |
Math.abs() |
Math |
abs() |
Arrays.sort() |
Arrays |
sort() |
यदि आप स्थिर विधि को उसकी कक्षा के भीतर से कॉल करते हैं, तो एक स्थिर विधि के नाम से पहले वर्ग का नाम छोड़ा जा सकता है । यही कारण है कि आपको बुलाए जाने वाले प्रत्येक स्थिर तरीकों के नाम से पहले लिखने की आवश्यकता नहीं है ।Solution
तथ्य 2। एक स्थैतिक विधि अपने स्वयं के वर्ग के गैर-स्थैतिक तरीकों तक नहीं पहुँच सकती है। एक स्थिर विधि केवल स्थैतिक विधियों तक ही पहुँच सकती है। नतीजतन, हम उन सभी विधियों की घोषणा करते हैं जिन्हें हम main
स्थिर विधि से कॉल करना चाहते हैं।"
"ऐसा क्यों?"
"जब आप ओओपी सीखना शुरू करते हैं और समझते हैं कि स्थिर तरीके कैसे काम करते हैं, तो आप इस प्रश्न का उत्तर स्वयं देंगे। तब तक, मुझ पर विश्वास करें।
throws
कीवर्ड
"एक अन्य कीवर्ड है जिसे आपने शायद एक विधि घोषणा - throws
कीवर्ड में देखा है। एक्सेस संशोधक और static
कीवर्ड के विपरीत, यह कीवर्ड विधि पैरामीटर के बाद रखा गया है:
public static Type name(parameters) throws Exception
{
method body
}
"और इसका क्या मतलब है?"
"एक बार फिर मुझे आपको बताना है कि आप इसका असली उद्देश्य बाद में सीखेंगे, जब हम अपवादों (स्तर 15 में) का अध्ययन करेंगे।
लेकिन इसे सतही रूप से स्पर्श करने के लिए, हम कह सकते हैं कि throws
कीवर्ड के साथ चिह्नित एक विधि त्रुटियों (अपवादों) को फेंक सकती है, जिसका अर्थ है Exception
वर्ग के उदाहरण (और कक्षाएं जो इसे प्राप्त करती हैं)। यदि कक्षा में कई अलग-अलग प्रकार की त्रुटियां हो सकती हैं, तो आपको उनमें से प्रत्येक को अल्पविराम से अलग करने की आवश्यकता है।"
"रहस्यमय और समझ से बाहर लगता है! मुझे लेवल 14 के लिए इंतजार करना होगा।"
मुख्य विधि
"आइए अब मुख्य विधि पर एक करीब से नज़र डालें। आप पहले से ही समझते हैं कि जिस रेखा पर एक विधि घोषित की जाती है, जिसमें सभी संशोधक होते हैं, यह प्रभावित करेगा कि इस विधि को अन्य वर्गों और विधियों से कैसे कहा जाता है। इसके अतिरिक्त, यह प्रकार को प्रभावित करता है। परिणाम विधि वापस आ जाएगी और इंगित करेगी कि चलने के दौरान कौन सी त्रुटियां संभव हैं।
"ऐसी लाइन को मेथड डिक्लेरेशन कहा जाता है और इसमें निम्नलिखित सामान्य प्रारूप होते हैं:
access modifier static Type name(parameters) throws exceptions
जहां से , , , या कुछ भी नहीं access modifiers
बदला गया है ;public
protected
private
यदि विधि स्थिर है, तो static
कीवर्ड प्रकट होता है (यह गैर स्थैतिक तरीकों के लिए अनुपस्थित है)
Type
वापसी मूल्य का प्रकार है ( void
यदि कोई परिणाम नहीं है)
"अब आपको इस बात की बेहतर समझ है कि main
विधि की घोषणा में इन सभी शब्दों का क्या अर्थ है:
public static void main(String[] args) throws Exception
"ठीक है, अब मुझे एहसास हुआ कि main()
किसी भी वर्ग से विधि तक पहुंच संभव है, जैसा कि public
कीवर्ड द्वारा इंगित किया गया है। विधि स्थिर है, इसलिए इसे स्पष्ट रूप से कहा जा सकता है Solution.main()
।"
"क्या परिणाम main()
विधि वापस आती है?"
"बिल्कुल भी नहीं! परिणाम प्रकार है void
। यह एक खाली प्रकार, एक प्लेसहोल्डर की तरह है।"
" main()
इसके कोष्ठकों में क्या है?"
"हम्म... यह पता चला है कि main
विधि में तर्क (!) लगते हैं। उन्हें स्ट्रिंग्स की एक सरणी के रूप में पारित किया जाता है।"
"यह सही है। और पैरामीटर नाम args
हमारे दिमाग में 'तर्क' सुझाता है। जब प्रोग्राम शुरू होता है, तो आप इसे तर्क - स्ट्रिंग्स की एक सरणी पास कर सकते हैं। वे विधि args
में सरणी में समाहित होंगे main()
।"
"वाह! जब मैंने इसे पहली बार देखा तो मैं इसके बारे में सोच रहा था, लेकिन फिर मुझे इसकी आदत हो गई और बिना सोचे-समझे पैरामीटर सूची लिखना शुरू कर दिया।"
"हम सब वहाँ रहे हैं। अंत में, (या इसके वंशज) जैसी अनहेल्ड त्रुटियां विधि Exception
में हो सकती हैं । हम इसे घोषणा के हिस्से के लिए धन्यवाद जानते हैं।"main()
throws Exception
"धन्यवाद, ऋषि। मुझे सब कुछ समझ नहीं आया, लेकिन यह दिलचस्प था।"
"आपका स्वागत है। धीरे-धीरे आप इन सभी सूक्ष्म बिंदुओं को समझेंगे, मुझे यकीन है।"
GO TO FULL VERSION