दिलचस्प पोस्ट
मैं सी # में फ़ाइल से संशोधित दिनांक कैसे प्राप्त करूं? मैं अपने SQL Server एजेंट कार्य में एक कदम कैसे बना सकता हूं जो कि मेरे एसएसआईएस पैकेज को चलाएगा? एक जीआईटी रिपॉजिटरी में सबम्यूडीयल्स की सूची कैसे अलग वातावरण में mysqli त्रुटि प्राप्त करने के लिए? XML फ़ाइलों के साथ इकाई फ़्रेमवर्क समूह द्वारा शीर्ष मूल्य प्राप्त करना प्रमाण पत्र की दुकान में एक प्रमाण पत्र में निजी कुंजी के लिए ASP.NET का उपयोग कैसे करें? एक NullPointerException क्या है, और मैं इसे कैसे ठीक करूँ? सीएसएस के साथ 1, 2, 3, … के बजाय 1, 1, 1.2, 1.3 (जैसा दिखता है) सूची का उत्पादन कर सकते हैं? पायथन में कई तिथियों के माध्यम से फेरबदल करना पायथन में HTML को पार्सिंग – एलएक्सएमएल या सुंदरसूप? किस प्रकार के उद्देश्य के लिए इनमें से बेहतर है? PowerShell में आउटपुट को अनदेखा करने का बेहतर (क्लीनर) तरीका क्या है? HTML स्ट्रिंग को छवि में कनवर्ट करें लघु पाठ स्ट्रिंग के लिए एक कुशल संप्रेषण एल्गोरिथ्म जावा में चालू वर्ष का पूर्णांक मान प्राप्त करें

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

निम्न कोड चर 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 

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

नहीं, वास्तव में, आपको अपने कॉन 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(); } 

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