2012-04-17 17 views
5

पर एक स्थिर संदर्भ बना रहा है, मैं अभी प्रयोग कर रहा हूं और पाया है कि जब मैं रोलिंग कोड चलाता हूं, तो यह संकलित नहीं होता है और मैं यह नहीं समझ सकता कि क्यों।जावा - गैर स्थैतिक फ़ील्ड सूची

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

public class MyList { 

    private List list; 

    public static void main (String[] args) { 
     list = new LinkedList(); 
     list.add("One"); 
     list.add("Two"); 
     System.out.println(list); 
    } 

} 

हालांकि, जब मैं इसे निम्नलिखित करने के लिए बदलने के लिए, यह करता है काम:

public class MyList { 

    private List list; 

    public static void main (String[] args) { 
     new MyList().exct(); 
    } 

    public void exct() { 
     list = new LinkedList(); 
     list.add("One"); 
     list.add("Two"); 
     System.out.println(list); 
    } 

} 
+2

मुख्य विधि स्थैतिक है। इसमें केवल स्थिर सदस्य चर और संलग्न वर्ग के कार्यों तक पहुंच है। त्रुटि बहुत आत्म-व्याख्यात्मक है। – Perception

+0

आपके कोड से, ऐसा लगता है कि आप सिंगलटन फैक्ट्री बनाने की कोशिश कर रहे हैं। यदि यह आपका लक्ष्य है, तो आपको 'निजी सूची सूची बदलनी चाहिए; 'निजी स्थिर सूची सूची '; –

+0

@ धारणा: तो यदि वह' निजी सूची सूची 'को बदलता है, तो' निजी स्थैतिक सूची सूची'; पहले कोड में, इसे काम करना चाहिए ??? – noMAD

उत्तर

4

स्थिर फ़ील्ड वे फ़ील्ड हैं जो कक्षा के सभी उदाहरणों में साझा की जाती हैं।
गैर स्थैतिक/सदस्य फ़ील्ड कक्षा के उदाहरण के लिए विशिष्ट हैं।

उदाहरण:

public class Car { 
    static final int tireMax = 4; 
    int tires; 
} 

यहाँ यह समझ में किसी भी कार टायर के किसी भी संख्या हो सकती है कि है, लेकिन अधिकतम संख्या सभी कारों में एक जैसा है।
यदि हमने tireMax परिवर्तनीय परिवर्तनीय बनाया है, तो मूल्य को संशोधित करने का अर्थ यह होगा कि सभी कारों में अब अधिक (या कम) टायर हो सकते हैं।

आपका दूसरा उदाहरण काम करने का कारण यह है कि आप एक नए MyList इंस्टेंस के list को पुनर्प्राप्त कर रहे हैं। पहले मामले में, आप स्थिर संदर्भ में हैं और विशिष्ट उदाहरण के संदर्भ में नहीं, इसलिए परिवर्तनीय list पहुंच योग्य नहीं है।

+0

'अंतिम' नहीं पढ़ा जाना चाहिए – Lucas

0

पहले उदाहरण में आप स्थैतिक सामग्री से गैर स्थैतिक क्षेत्र को कॉल कर रहे हैं, जो संभव नहीं है। दूसरे में आप MyList ऑब्जेक्ट पर ext फ़ंक्शन को कॉल कर रहे हैं, जिसकी उस फ़ील्ड तक पहुंच है।

संबंधित मुद्दे