Computer >> कंप्यूटर ट्यूटोरियल >  >> समस्या निवारण >> Windows त्रुटियाँ

फिक्स: नॉन-स्टैटिक मेथड को स्टैटिक संदर्भ से संदर्भित नहीं किया जा सकता

कई प्रोग्रामर कोडिंग करते समय त्रुटि संदेश 'Non static method cannot be referenced from a static context' का सामना करते हैं। यह त्रुटि संदेश विशिष्ट नहीं है और किसी भी IDE में हो सकता है यदि त्रुटि के लिए शर्तें सही हैं।

फिक्स: नॉन-स्टैटिक मेथड को स्टैटिक संदर्भ से संदर्भित नहीं किया जा सकता

यह शुरुआती लोगों के लिए एक बहुत ही सामान्य गलती है जहां प्रोग्रामर क्लास का इंस्टेंस बनाए बिना उसे 'स्टैटिकली' उपयोग करने का प्रयास करता है। कई शर्तें हैं जिन्हें पूरा किया जाना चाहिए जब आप एक क्लास का उपयोग कर रहे हैं जो स्टैटिक है। इस लेख में, हम कई अलग-अलग मामलों से गुजरेंगे और आपको स्टैटिक क्लास का उपयोग करने के बारे में मार्गदर्शन करेंगे।

स्टैटिक मेथड क्या है?

किसी भी मेथड में 'static' कीवर्ड जोड़ने से वह मेथड स्टैटिक मेथड के रूप में जाना जाता है। एक स्टैटिक मेथड ऑब्जेक्ट (जो मानक है) के बजाय क्लास से संबंधित होता है। एक स्टैटिक मेथड को क्लास का इंस्टेंस बनाने की शर्त के बिना आसानी से आह्वान किया जा सकता है।

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

यहां एक छोटा उदाहरण है कि कैसे एक स्टैटिक मेथड सभी ऑब्जेक्ट्स की संपत्ति बदलने के लिए बनाया जा सकता है।

class Students{ int roll_no; String name; static String college = "InformationTech"; static void change(){ college = "Management"; } Students (int number, String name_self){ roll_no = number; name = name_self; } void display (){System.out.println(rollno+" "+name+" "+college);} public static void main(String args[]){ Students.change(); Students stu_1 = new Students (100,"Mexican"); Students stu_2 = new Students (202,"American"); Students stu_3 = new Students (309,"British"); stu_1.display(); stu_2.display(); stu_3.display(); } }

प्रोग्राम का आउटपुट होगा:

100 Mexican Management 202 American Management 309 British Management

क्लास और क्लास के इंस्टेंस में क्या अंतर है?

सोचें कि आप सड़क पर चल रहे हैं और आपको एक कार दिखाई देती है। अब आप तुरंत जानते हैं कि यह एक कार है भले ही आप नहीं जानते कि इसका मॉडल या प्रकार क्या है। ऐसा इसलिए है क्योंकि आप जानते हैं कि यह 'कारों' की क्लास से संबंधित है जिसे आप पहले से जानते हैं। यहां क्लास को एक टेम्पलेट या विचार के रूप में सोचें।

अब जैसे ही आप करीब जाते हैं, आप कार का मॉडल और मेक देखते हैं। यहां आप 'कार' क्लास के 'इंस्टेंस' को पहचान रहे हैं। यहां सभी गुण विस्तार से मौजूद होंगे; पहिए, हॉर्सपावर, रिम्स आदि।

गुणों का एक उदाहरण यह हो सकता है कि क्लास 'कार' बताता है कि सभी कारों में पहिए होने चाहिए। जो कार आप देख रहे हैं (कार क्लास का एक इंस्टेंस) उसमें अलॉय रिम्स हैं।

ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में, आप क्लास को स्वयं परिभाषित करते हैं और क्लास के अंदर, आप 'रंग' प्रकार का एक फ़ील्ड परिभाषित करते हैं। जब भी क्लास इंस्टेंशिएट होती है, बैकएंड पर रंग के लिए मेमोरी स्वचालित रूप से आरक्षित हो जाती है और बाद में, आप इसे एक विशिष्ट मान दे सकते हैं (उदाहरण के लिए लाल)। चूंकि इस तरह के गुण विशिष्ट हैं, वे नॉन-स्टैटिक हैं।

इसके विपरीत, स्टैटिक मेथड और फ़ील्ड सभी इंस्टेंस के साथ साझा किए जाते हैं। ये उन मानों या वस्तुओं के लिए बनाए जाते हैं जो क्लास के लिए विशिष्ट हैं न कि इंस्टेंस के लिए। मेथड के लिए, ग्लोबल मेथड हो सकते हैं (उदाहरण के लिए, stringToInt कन्वर्टर) और फ़ील्ड के लिए, वे आमतौर पर आपके कोड के अनुसार स्थिरांक होते हैं (उदाहरण के लिए, कार का प्रकार स्टैटिक हो सकता है यदि आप केवल सामान्य कारों का निर्माण कर रहे हैं)।

अब, हम उन सभी अलग-अलग मामलों को देखेंगे जहां आपका कोड गलत हो सकता है और उन्हें ठीक करने के समाधान देखेंगे।

मुद्दा 1: आप किसी ऐसी चीज़ को कॉल कर रहे हैं जो मौजूद नहीं है

हम कुछ ऐसे मामलों में आए जहां उपयोगकर्ता स्टैटिक और नॉन-स्टैटिक मेथड दोनों का एक साथ उपयोग कर रहे थे। जब हम ऐसा करते हैं, तो आपको सावधान रहना चाहिए कि कौन सा मेथड क्या कॉल कर रहा है (स्टैटिक या नॉन-स्टैटिक के संदर्भ में)। निम्न कोड देखें:

private java.util.List someMethod(){ /* Some Code */ return someList; } public static void main(String[] strArgs){ // The following statement causes the error. You know why.. java.util.List someList = someMethod(); }

यहां, स्टैटिक मेथड someMethod को कॉल कर रहा है। ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में, हम उस डेटा को एक साथ एनकैप्सुलेट करते हैं जिस पर हम ऑपरेट करना चाहते हैं। यहां, ऑब्जेक्ट के बिना, कोई इंस्टेंस डेटा नहीं है और जबकि इंस्टेंस मेथड क्लास परिभाषा के हिस्से के रूप में मौजूद हैं, उन्हें डेटा प्रदान करने के लिए हमेशा एक ऑब्जेक्ट इंस्टेंस होना चाहिए।

तो संक्षेप में, आप किसी ऐसी चीज़ को कॉल नहीं कर सकते जो मौजूद नहीं है। चूंकि आपने ऑब्जेक्ट नहीं बनाया होगा, नॉन-स्टैटिक मेथड अभी तक मौजूद नहीं है। हालांकि, दूसरी ओर, एक स्टैटिक मेथड हमेशा मौजूद रहेगा (परिभाषा के कारण)।

मुद्दा 2: मेथड स्टैटिक नहीं बने हैं

यदि आप अपने स्टैटिक मेन मेथड से मेथड को बिना इंस्टेंस बनाए आह्वान कर रहे हैं, तो आपको एक त्रुटि संदेश मिलेगा। यहां, वही सिद्धांत लागू होता है; आप किसी ऐसी चीज़ तक नहीं पहुंच सकते जो मौजूद नहीं है।

public class BookStoreApp2 { //constants for options Scanner input = new Scanner (System.in); public static void main(String[] args) { BookStoreItem[] item;//declaring array item = new BookStoreItem[10];//initializing array int itemType = -1; printMenu(); getUserChoice(); for (int i = 0; i < item.length; i++){ }//end of switch statement }//end of for loop for (int i = 0; i < item.length; i++) { }//end of for }//end of main method

इस कोड में, आपको दोनों मेथड printMenu() और getUserChoice() को स्टैटिक मेथड में बदलने की आवश्यकता है।

इसलिए यदि आप इस तरह की स्थिति से बचना चाहते हैं, तो आप एक कंस्ट्रक्टर का उपयोग कर सकते हैं। उदाहरण के लिए, आप अपने main() मेथड की सामग्री को ले सकते हैं और उन्हें एक कंस्ट्रक्टर के अंदर रख सकते हैं।

public BookStoreApp2() { // Put contents of main method here} After doing this, do the following inside your main() method: public void main( String[] args ) { new BookStoreApp2(); }

यदि ये टिप्स आपके काम नहीं आते या आपका कोड अलग है, तो आपको स्टैटिक क्लास और मेथड के बुनियादी सिद्धांतों को ध्यान में रखना चाहिए और अपने कोड को फिर से जांचना चाहिए ताकि यह सुनिश्चित हो सके कि बुनियादी सिद्धांत का उल्लंघन नहीं हो रहा है।


  1. विंडोज 10 पर  होमग्रुप नहीं बना सकते  त्रुटि हल करें विंडोज 10 पर 'होमग्रुप नहीं बना सकते' त्रुटि हल करें

    विंडोज 10 पर होमग्रुप नहीं बना सकते त्रुटि ठीक करें: जब दो या दो से अधिक लोग किसी प्रोजेक्ट पर काम कर रहे हों और वे एक-दूसरे से बहुत कम दूरी पर बैठे हों, लेकिन क्या होगा यदि वे एक-दूसरे के साथ कुछ साझा करना चाहें तो उन्हें क्या करना चाहिए? क्या विंडोज कोई तरीका प्रदान करता है ताकि एक ही घर में कई पी

  1. फॉलआउट 76  सर्वर से डिस्कनेक्टेड  त्रुटि को तुरंत ठीक करें फॉलआउट 76 'सर्वर से डिस्कनेक्टेड' त्रुटि को तुरंत ठीक करें

    फॉलआउट 76 बेथेस्डा स्टूडियो द्वारा 2018 में जारी एक लोकप्रिय मल्टीप्लेयर रोल-प्लेइंग एक्शन गेम है। गेम विंडोज पीसी, Xbox One, और प्ले स्टेशन 4 पर उपलब्ध है और यदि आप फॉलआउट सीरीज गेम पसंद करते हैं तो, आप इसे खेलने का आनंद लेंगे। हालांकि, कई खिलाड़ियों ने बताया है कि जब उन्होंने अपने कंप्यूटर पर गेम

  1. विंडोज 10 सेकेंडरी मिरर ड्राइव बूट विफलता हल करें - चरण-दर-चरण गाइड विंडोज 10 सेकेंडरी मिरर ड्राइव बूट विफलता हल करें - चरण-दर-चरण गाइड

    इस ट्यूटोरियल में निम्न समस्या को ठीक करने के निर्देश हैं: एक विंडोज 10 आधारित कंप्यूटर पर, जहां बूट ड्राइव को विंडोज मिरर फीचर (S/W RAID-1) का उपयोग करके मिरर किया गया था, यदि प्राइमरी ड्राइव बूट नहीं होती या क्षतिग्रस्त हो जाती है तो सिस्टम सेकेंडरी मिरर ड्राइव से बूट नहीं कर सकता। समस्या विवरण