2015-05-27 5 views
6

जहाँ तक मुझे पता के रूप में इस निम्न स्थितियों में इस्तेमाल किया जाता है:जावा में "यह" कहां उपयोग करें?

  1. this कीवर्ड प्रयोग किया जाता है जब हम स्थानीय चर के रूप में एक ही नाम होने उदाहरण चर का उल्लेख करना चाहते हैं।
  2. एक ही कक्षा में दूसरे के लिए एक कन्स्ट्रक्टर को कॉल करना।
  3. कक्षा के उदाहरण को विधि के लिए तर्क के रूप में पास करें।
  4. बाहरी वर्ग चर का उपयोग करना।

लेकिन मैं जैसे ही टिककर खेल में अपने प्रोजेक्ट कोड माध्यम से चले गए, जहां वे इस प्रयोग कर रहे हैं: जहाँ तक मुझे पता है

class a { 
    int time; 

    int getValue() { 
     return this.time * 5.; 
    } 
} 

, हर वस्तु उदाहरण चर और तरीकों की अपनी एक प्रतिलिपि है, तो होगा इस तरह से लौटने से कोई समझ आता है। कृपया स्पष्ट करें।

Stackoverfow समस्या स्थान्तरित:

public void setFoo(Foo foo) { 
    this.foo = foo; 
} 

का उपयोग this अनिवार्य है: When should I use "this" in a class?

+3

'यह' वर्तमान ऑब्जेक्ट उदाहरण को संदर्भित करता है, इसलिए 'this.time' "उदाहरण की चर की अपनी प्रति" को संदर्भित करता है। हालांकि यह वैकल्पिक है। इंस्टेंस वैरिएबल का जिक्र करते समय कई प्रोग्रामर 'this' का उपयोग नहीं करते हैं। कोड @ श्रीनाथगेश शो हालांकि रचनाकारों के लिए एक अच्छा सम्मेलन है। – DavidS

उत्तर

6

जब आप निम्न में से एक की तरह एक विधि है। अन्यथा, यह आवृत्ति चर को आवंटित करने के बजाय, खुद को तर्क foo असाइन करेगा।

लेकिन इसका मतलब यह नहीं है कि this का उपयोग कर सकता है। निम्नलिखित कोड सख्ती से बराबर है:

public void setFoo(Foo newFoo) { 
    this.foo = newFoo; 
} 

उस मामले में, फिर भी आप बहुत अच्छी तरह से लिख सकते हैं

public void setFoo(Foo newFoo) { 
    foo = newFoo; 
} 

क्योंकि this अब और आवश्यक नहीं है। यह अवैध नहीं बनाता है।

तो,

int getValue() { 
    return time * 5; 
} 

और

int getValue() { 
    return this.time * 5; 
} 

सख्ती से बराबर हैं।

9

कई लोग (मैं उनमें से एक हूं) this कीवर्ड का उपयोग तब भी करता है जब इसकी स्पष्ट रूप से आवश्यकता नहीं होती है।

  • कुछ लोगों को यह और अधिक स्पष्ट कुछ भी जो हैं एक ही कक्षा में, एक ही तर्क super पर लागू होते हैं के सामने this डाल करने के लिए लगता है।
  • कुछ लोग हमेशा कुछ आईडीई में बेहतर ऑटो-पूर्णता (पॉप-अप स्वचालित रूप से दिखाई देते हैं, आलसी प्रोग्रामर) के लिए प्रतिबिंबित करके this का उपयोग करते हैं।

ये अंक अधिकतर राय पर आधारित हैं और वास्तव में कोई फर्क नहीं पड़ता।

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

हालांकि, आईएमओ, यह एक ही नाम के साथ कई चर नहीं होने के लिए आसान तरीका है।

1

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

यहां दो अलग-अलग प्रोग्रामिंग शैलियों का एक उदाहरण है। दोनों एक ही काम करते हैं लेकिन पहला उदाहरण कन्स्ट्रक्टर को स्पष्ट रूप से कॉल करने के लिए 'यह' का उपयोग करता है।

public class Foo { 
    public Foo() { this("Hello"); } //Explicit constructor call 
    public Foo(String string) { System.out.print(string); } 
    } 

    public class Bar { 
    public Bar() { new Bar("Hello"); } 
    public Bar(String string) { System.out.print(string); } 
    } 
1

कीवर्ड 'इस' अक्सर युक्त कक्षा में क्षेत्रों को संदर्भित करने के गुमनाम वर्गों के भीतर से किया जाता है। उदाहरण के लिए:

public class App 
{ 
    public String myString = "This is Java"; 
    public App() 
    { 
     JButton button = new JButton("Test"); 
     button.addActionListener(new ActionListener(){ 

     @Override 
     public void actionPerformed(ActionEvent arg0) 
     { 
      System.out.println(App.this.myString); // <-- App.this gives access to public fields in App 
     }}); 
    } 
} 
संबंधित मुद्दे