2012-01-31 11 views
9

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

public class Test { 
    public static void main(String[] args) { 
     Position p = new Position(0,0); 
     int a = p.x; // example of member access 
    } 
} 

class Position { 
    public int x; 
    public int y; 

    public Position(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 
} 

. जावा प्रोग्रामिंग भाषा में एक ऑपरेटर माना जाता है, बस *, ~, और != माना जाता है ऑपरेटरों है?


संपादित - ऊपर के उदाहरण का विस्तार:

के रूप में बताया गया है, ऐसा लगता है कि जावा भाषा विनिर्देश समझता है . एक विभाजक और नहीं एक ऑपरेटर होने के लिए। फिर भी, मैं यह इंगित करना चाहता हूं कि . कुछ व्यवहार दिखाता है जो ऑपरेटर-आईएसएच प्रतीत होता है। ऊपर के उदाहरण निम्नलिखित के लिए बढ़ा दिया पर विचार करें:

public class Test { 
    public static void main(String[] args) { 
     Position p = new Position(0,0); 
     int a = p . x; // a -> 0 
     int x = 1; 
     int b = p . x + x; // b -> 1 
    } 
} 

class Position { 
    public int x; 
    public int y; 

    public Position(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 
} 

यह स्पष्ट है कि कुछ पूर्वता ऐसी है कि सदस्य पहुँच अलावा पहले मूल्यांकन किया जाता है लागू किया जा रहा है। यह अंतर्ज्ञानी लगता है क्योंकि अगर अतिरिक्त मूल्यांकन किया जाना था, तो हमारे पास p.2 होगा जो बकवास है। फिर भी, यह स्पष्ट है कि . व्यवहार प्रदर्शित कर रहा है कि अन्य विभाजक नहीं करते हैं।

+0

"यह" वाक्यविन्यास छोड़ने पर विचार करें। जब आप कक्षाओं का विस्तार करते हैं तो दूसरी तरफ सुपर जावा में यह बुरा व्यवहार है। – Tom

+3

@Tom अगर मैं अपने उदाहरण में 'इस' के उपयोग से छुटकारा पाता हूं, तो मेरे सार्वजनिक क्षेत्र तत्काल नहीं होंगे और मेरे पास रन-टाइम त्रुटि होगी। इसके अलावा, यह विशेष रूप से मेरे प्रश्न से संबंधित नहीं है। – jbranchaud

+3

@ आपकी राय शायद, लेकिन शायद ही कभी एक सामान्य नियम है। मैं व्यक्तिगत रूप से पैरामीटर के लिए कुछ नए नामों का आविष्कार करने के लिए सेटर्स और रचनाकारों में इसका उपयोग करता हूं ताकि मैं उन्हें और फ़ील्ड में अंतर कर सकूं। – Voo

उत्तर

15

इसे विभाजक माना जाता है, ऑपरेटर नहीं। सभी विभाजक और ऑपरेटरों की सूची के लिए Java Language Specification sections 3.11 and 3.12 देखें।

+0

मुझे अभी भी कुछ अनिश्चितता है। एक डबल (उदा। '1.1') के संदर्भ में, यह एक विभाजक की तरह प्रतीत होता है, लेकिन यह सदस्य पहुंच के संदर्भ में एक ऑपरेटर का अधिक प्रतीत होता है। – jbranchaud

+0

@ ट्रीब्रैंच - [एक्सेस कंट्रोल] पर चर्चा में (http://java.sun.com/docs/books/jls/third_edition/html/names.html#104285), जेएलएस _qualified names_: "a" का वर्णन करता है। "टोकन प्रकट होता है, जो किसी प्रकार के पैकेज, प्रकार या अभिव्यक्ति के कुछ संकेतों से पहले होता है और उसके बाद एक पहचानकर्ता होता है जो पैकेज या प्रकार के सदस्य का नाम देता है।" तो वहां यह एक ऑपरेटर की तुलना में एक "टोकन" और विराम चिह्न (यानी, विभाजक) की तरह है। किसी भी घटना में, "।" का सटीक वर्गीकरण जावा में टोकन उतना महत्वपूर्ण नहीं है जितना कि, सी ++ कहता है, क्योंकि जावा ऑपरेटर ओवरराइडिंग की अनुमति नहीं देता है। –

+0

यह समझ में आता है जब स्पष्टीकरण के लिए धन्यवाद! – jbranchaud

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