दिलचस्प पोस्ट
@ संश्लेषित इंस्टेंस चर की दृश्यता क्या है? मैं Google स्प्रेडशीट कैसे खोजूं? यह निर्धारित करने के लिए कि क्या स्ट्रिंग में गैर-अल्फ़ान्यूमेरिक वर्ण हैं? JSF 2 में सत्र समाप्ति और ViewExpiredException को कैसे नियंत्रित करें? क्या स्थानीय कार्य घोषणाओं के लिए कोई फायदा है? सी / सी ++ बहुआयामी सरणी इंटरनेशनल कुशल कार्तीय उत्पाद एल्गोरिथ्म पायथन रेगेक्स सभी अतिव्यापी मैचों को ढूंढता है? मैं ओएस और ब्राउज़र जैसे क्लाइंट इन्फॉर्मेशन कैसे प्राप्त कर सकता हूं पायथन 3: लेखन सीएसवी फाइलें डिफ़ॉल्ट स्ट्रिंग आरंभीकरण: शून्य या खाली है? जेपीए और हाइबरनेट में क्या अंतर है? टैब या विंडो सक्रिय नहीं होने पर ब्राउज़र कैसे जावास्क्रिप्ट को रोकते हैं? एक सक्रिय रिकॉर्डिंग रिकॉर्ड का डुप्लिकेट सबसे आसान तरीका क्या है? एक निर्माता को अपवाद फेंकने के लिए कब सही है?

जावा: गैर-स्थिर चर को एक स्थिर संदर्भ त्रुटि से संदर्भित नहीं किया जा सकता है

निम्न कोड चर con2 पर एक त्रुटि पैदा कर रहा है "non-static variable con2 cannot be referenced from a static context Error." मैं एक प्रस्ताव के लिए Googled और वे सुझाव दे रहे हैं चर अभी तक initalized नहीं है तरीकों उपलब्ध बनाने के लिए। क्या मैं यह गलत तरीके से शुरू कर रहा हूँ? मैंने लोगों को चीजों को बदलने की भी कोशिश की, लेकिन इससे कोई मदद नहीं मिली।

 import java.io.*; import java.net.*; import java.sql.*; import java.sql.CallableStatement; import java.sql.ResultSet; import java.sql.PreparedStatement; import net.sourceforge.jtds.jdbcx.JtdsDataSource; import net.sourceforge.jtds.jdbc.Driver; class testconnect { private java.sql.Connection con2 = null; private final String url2 = "jdbc:jtds:sqlserver://"; private final String serverName= "SQL01"; private final String portNumber = "2677"; private final String databaseName= "App"; private final String userName = "bob"; private final String password = "boob"; private final String selectMethod = "cursor"; private String getConnectionUrl2(){ System.out.println("initalizing jtds"); //String returnVal = url+serverName+":"+portNumber+";databaseName="+databaseName+";user="+userName+";password="+password+";instance="+instance+";"; String returnVal = url2+serverName+":"+portNumber+"/"+databaseName+";user="+userName+";password="+password; System.out.println("url2: " + returnVal); return returnVal; } public static void main (String[] args) { con2 = java.sql.DriverManager.getConnection(getConnectionUrl2()); } } //end class 

Solutions Collecting From Web of "जावा: गैर-स्थिर चर को एक स्थिर संदर्भ त्रुटि से संदर्भित नहीं किया जा सकता है"

नहीं, वास्तव में, आपको अपने कॉन 2 क्षेत्र स्थिर घोषित करना होगा:

 private static java.sql.Connection con2 = null; 

संपादित करें: सुधार, जो वास्तव में पर्याप्त नहीं होगा, आपको एक ही समस्या मिलेगी क्योंकि आपकी getConnection2Url विधि स्थिर नहीं है इसके बजाय एक बेहतर समाधान हो सकता है:

  public static void main (String[] args) { new testconnect().run(); } public void run() { con2 = java.sql.DriverManager.getConnection(getConnectionUrl2()); } 

आप संभवतः "स्थिर" को कॉन 2 की घोषणा के लिए जोड़ना चाहते हैं।

जावा में, चीजें (दोनों चर और विधियों) कक्षा के गुण हो सकते हैं (जिसका अर्थ है कि वे उस प्रकार के सभी ऑब्जेक्ट्स द्वारा साझा किए जाते हैं), या वे ऑब्जेक्ट के गुण हो सकते हैं (एक ही वर्ग के प्रत्येक ऑब्जेक्ट में एक अलग )। कीवर्ड "स्थिर" का उपयोग यह संकेत करने के लिए किया जाता है कि कुछ कक्षा की संपत्ति है।

"स्थिर" सामान हर समय मौजूद होता है अन्य सामान केवल एक ऑब्जेक्ट बनाने के बाद ही मौजूद होते हैं, और तब भी प्रत्येक व्यक्तिगत ऑब्जेक्ट की अपनी प्रतिलिपि होती है और इस मामले में फ्लिप पक्ष महत्वपूर्ण है: स्थिर सामग्री गैर-स्थिर सामग्री तक नहीं पहुंच सकती है, क्योंकि यह नहीं पता कि किस ऑब्जेक्ट को अंदर दिखाना है। यदि आप इसे ऑब्जेक्ट संदर्भ पास करते हैं, तो यह सामान "चींटी .con2 ", लेकिन बस" कों 2 "कहने की अनुमति नहीं है, क्योंकि आपने यह नहीं कहा है कि ऑब्जेक्ट के कॉन 2 का अर्थ क्या है।

जावा में दो प्रकार के वेरिएबल्स हैं

ए)
कक्षा स्तर (स्टेटिक):
वे प्रति वर्ग एक हैं। क्या आपके पास छात्र वर्ग और परिभाषित नाम है स्थिर वैरिएबल के रूप में.अब आप चाहे कितने छात्र ऑब्जेक्ट बनाते हैं, सभी का एक ही नाम होगा।

ऑब्जेक्ट स्तर:
वे प्रत्येक वस्तु के हैं। यदि नाम अस्थायी है, तो सभी छात्र का नाम अलग हो सकता है।

ख)
कक्षा स्तर:
यह चर क्लास लोड पर आरंभीकृत हैं। यहां तक ​​कि अगर कोई छात्र ऑब्जेक्ट नहीं बनाया गया है तो भी आप स्थिर नाम चर का उपयोग कर सकते हैं और उसका उपयोग कर सकते हैं।

ऑब्जेक्ट स्तर: जब आप एक नया ऑब्जेक्ट बनाते हैं, तो इनका आरम्भ किया जाएगा (नया);

सी)
आपकी समस्या: आपका क्लास सिर्फ जेवीएम में लोड किया गया है और आपने इसकी मुख्य (स्थैतिक) विधि को बुलाया है: कानूनी तौर पर अनुमति दी गई है

अब से आप एक ऑब्जेक्ट varibale कॉल करना चाहते हैं: ऑब्जेक्ट कहां है ??

आपको एक ऑब्जेक्ट बनाना होगा और उसके बाद ही आप ऑब्जेक्ट लेवल varibales तक पहुंच सकते हैं।

आपकी मुख्य () विधि स्थिर है, लेकिन यह दो गैर-स्थिर सदस्यों को संदर्भित कर रहा है: con2 और getConnectionUrl2 ()। आपको तीन में से एक काम करने की आवश्यकता है:

1) con2 और getConnectionUrl2 () स्थिर बनाओ

2) मुख्य () के अंदर, उस श्रेणी से क्लास टेस्टकनेक्ट और एक्सेस कंस 2 और गेटकॉन्नेक्शनयूआरएल 2 () का एक उदाहरण बनाएं।

3) एक अलग क्लास को कन्फो 2 और क्विकेशन यूआरएल 2 () को पकड़ने के लिए बाहर निकालना ताकि उसमें टेस्टकनेक्शन केवल मुख्य होगा इसे अभी भी अलग-अलग क्लास को इन्स्तांत करने की जरूरत है और उस तरीके से कॉल करें

विकल्प # 3 सबसे अच्छा विकल्प है # 1 सबसे खराब है।

लेकिन, आप एक स्थिर विधि के भीतर से गैर-स्थैतिक सदस्यों तक पहुंच नहीं सकते हैं।

सरल बदलाव कुछ ऐसा होगा:

 public static void main (String[] args) throws Exception { testconnect obj = new testconnect(); obj.con2 = DriverManager.getConnection(obj.getConnectionUrl2()); obj.con2.close(); } 

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