2010-11-19 10 views
8
class Singer 
{ 
String name; 
String album; 

public Singer(){ 
    name="Whitney Houson"; 
    album="Latest Releases"; 
} 

public static void main(String[] args) 
{ 
    System.out.println("Name of the singer is "+name); 
    System.out.println("Album Information stored for "+album); 

} 
} 

जब मैं इस कोड को मैं त्रुटि लग रहा है जो कहते हैं कि गैर स्थिर चर नाम एक स्थिर संदर्भगैर स्थिर चर नाम एक स्थिर संदर्भ से संदर्भित नहीं किया जा सकता

उत्तर

10

है कि से संदर्भित नहीं किया जा सकता चलाने क्योंकि चर नाम और एल्बम मुख्य प्रक्रिया में मौजूद नहीं है, क्योंकि यह स्थैतिक है, जिसका अर्थ यह है कि यह आवृत्ति-स्तर के सदस्यों तक नहीं पहुंच सकता है। आप सिंगर वर्ग का एक उदाहरण है, इस तरह की आवश्यकता होगी:

public static void main(String[] args) { 
Singer s = new Singer(); 
System.out.println("Name of the singer is " + s.name); 
System.out.println("Album information stored for " + s.album); 
} 

हालांकि, जब तक आप एक सार्वजनिक उपयोग संशोधक के साथ अपना नाम/एल्बम के सदस्यों की घोषणा, ऊपर कोड को संकलित करने के असफल हो जायेगी। मैंने encapsulation से लाभ प्राप्त करने के लिए, प्रत्येक सदस्य (getName(), getAlbum(), आदि) के लिए एक गेटर लिखने की सिफारिश की। इस तरह:

class Singer { 
private String name; 
private String album; 

public Singer() { 
    this.name = "Whitney Houston"; 
    this.album = "Latest Releases"; 
} 

public String getName() { 
    return this.name; 
} 

public String getAlbum() { 
    return this.album; 
} 

public static void main(String[] args) { 
    Singer s = new Singer(); 
    System.out.println("Name of the singer is " + s.getName()); 
    System.out.println("Album information stored for " + s.getAlbum()); 

} 

} 

एक अन्य विकल्प तो आप उन्हें जिस तरह से आप मूल रूप से करना में देख सकते हैं नाम और एलबम के रूप में स्थिर घोषित करने के लिए किया जाएगा।

+0

'... + s.name); ... + s.album); ' – khachik

+0

बीटीडब्लू, उपर्युक्त कोड संकलित और ठीक चलाएगा, अगर नाम 'निजी' से 'सिंगर' से संबंधित है तो नाम निजी है। – khachik

0

क्रिस हचिन्सन ने एक विकल्प चुना है। दूसरा एक उन्हें स्थिर घोषित करना है।

मुख्य एक स्थिर विधि है। तो नाम और एल्बम को स्थिर के रूप में घोषित किया जाना है।

private static String name; 
private static String album; 
1

मुख्य एक स्थिर विधि है। इंस्टेंस वैरिएबल (क्लास में परिभाषित चर, लेकिन स्थैतिक के रूप में चिह्नित नहीं) को क्लास के उदाहरण के संदर्भ में एक स्थिर विधि से एक्सेस नहीं किया जा सकता है।

public static void main(String[] args) 
{ 
    Singer singer = new Singer(); 
    System.out.println("Name of the singer is " + singer.name); 
    System.out.println("Album Information stored for " + singer.album); 
} 
+0

जब मैंने इस कोड का पालन किया तो कोई त्रुटि नहीं हुई, लेकिन जब मैं इस कोड को चलाता हूं तो एक त्रुटि दी जाती है जो थ्रेड "अप" में अपवाद की तरह कहती है। Jang.lang.NoClassDefFoundError: Singer –

0

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

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

2

अस्तित्व के लिए एक गैर स्थैतिक सदस्य या वर्ग को स्थापित करने की आवश्यकता है। फिर, किसी स्थैतिक सदस्य से एक गैर स्थैतिक सदस्य या ऑब्जेक्ट तक पहुंचने से यह गारंटी नहीं मिलती है कि इस सदस्य या ऑब्जेक्ट को तुरंत चालू किया गया है, तो उस तक पहुंच असंभव है।

आपको इसे बनाने के लिए अपने स्थिर संदर्भ में अपनी गैर स्थैतिक वस्तु का एक उदाहरण बनाना होगा।

class Singer { 
    String name; 
    String album; 

    // You will need the following to make your code compile, 
    // and the call to these getters within your 'main' function. 
    public getName() { 
     return name; 
    } 

    public getAlbum() { 
     return album; 
    } 

    public Singer() { 
     name="Whitney Houson"; 
     album="Latest Releases"; 
    } 

} 

public static void main(String[] args) { 
    Singer singer = new Singer(); 
    System.out.println("Name of the singer is " + singer.getName()); 
    System.out.println("Album Information stored for " + singer.getAlbum()); 
} 

इस तरह, आप thuis आश्वस्त यह ठीक से instantiated से पहले इस तक पहुंच बनाए, एक स्थिर वस्तु में Singer वस्तु की इन्स्टेन्शियशन शामिल हैं।

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