मुझे कक्षा में "यह" कब उपयोग करना चाहिए?


267

मुझे पता है कि thisएक वर्तमान वस्तु को संदर्भित करता है। लेकिन मुझे नहीं पता कि मुझे वास्तव में इसका उपयोग करने की आवश्यकता कब है। उदाहरण के लिए, अगर मैं कुछ विधियों के xबजाय उपयोग करूं तो क्या कोई अंतर होगा this.x? हो सकता है xकि एक ऐसे चर का उल्लेख किया जाए जो विचार विधि के लिए स्थानीय हो? मेरा मतलब चर है जो केवल इस पद्धति में देखा जाता है।

किस बारे में this.method()? क्या मैं इसका इस्तेमाल कर सकता हूं? क्या मुझे इसका उपयोग करना चाहिए? यदि मैं अभी उपयोग करता हूं method(), तो क्या यह डिफ़ॉल्ट रूप से, वर्तमान वस्तु पर लागू नहीं होगा?

जवाबों:


347

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

केस 1:this परिवर्तनशील संदर्भों की अवहेलना करना । जावा सेटर विधियों में, हम आमतौर पर एक तर्क के साथ उसी नाम से गुजरते हैं जिस निजी सदस्य चर को हम सेट करने का प्रयास कर रहे हैं। हम फिर तर्क xदेते हैं this.x। इससे यह स्पष्ट होता है कि आप पैरामीटर "नाम" के मान को उदाहरण चर "नाम" के लिए निर्दिष्ट कर रहे हैं।

public class Foo
{
    private String name;

    public void setName(String name) {
        this.name = name;
    }
}

केस 2:this एक तर्क के रूप में उपयोग करके किसी अन्य ऑब्जेक्ट को पास किया गया।

public class Foo
{
    public String useBarMethod() {
        Bar theBar = new Bar();
        return theBar.barMethod(this);
    }

    public String getName() {
        return "Foo";
    }
}

public class Bar
{
    public void barMethod(Foo obj) {
        obj.getName();
    }
}

केस 3:this वैकल्पिक बिल्डरों को कॉल करने के लिए उपयोग करना । टिप्पणियों में, ट्राइनिथिस ने सही तरीके से एक और सामान्य उपयोग बताया this। जब आपके पास एक एकल वर्ग के लिए कई निर्माता हैं, तो आप this(arg0, arg1, ...)अपने चयन के किसी अन्य निर्माता को कॉल करने के लिए उपयोग कर सकते हैं , बशर्ते आप अपने निर्माता की पहली पंक्ति में ऐसा करते हैं।

class Foo
{
    public Foo() {
        this("Some default value for bar");

        //optional other lines
    }

    public Foo(String bar) {
        // Do something with bar
    }
}

मैंने thisइस तथ्य पर जोर देने के लिए भी इस्तेमाल किया है कि एक उदाहरण चर का संदर्भ दिया जा रहा है (असंतोष की आवश्यकता है), लेकिन यह मेरी राय में एक दुर्लभ मामला है।


21
+1 उल्लेख आप भी पारित कर सकते हैं कि के लिए यह एक तर्क के रूप। यह न केवल गुंजाइश असंबद्धता के लिए उपयोग किया जाता है।
एलेक्स जैस्मीन

12
बेशक this(arg1, arg2, ...)एक कंस्ट्रक्टर के अंदर भी है।
थॉमस एडिंग

12
@ हाज़ीर: मैं एक छोटा जवाब लिखना चाहता हूं और फिर समय के साथ इसे जोड़ देता हूं। कभी-कभी यह अन्य लोगों के उत्तरों के साथ ओवरलैप हो जाता है, कभी-कभी नहीं। मेरे नवीनतम संपादन के मामले में, ट्रिनिथिस ने एक और सामान्य उपयोग की ओर इशारा किया thisजिसे मैं भूल गया था, इसलिए मैंने इसे अपने उत्तर में जोड़ा। मुझे इसमें कुछ भी गलत नहीं दिखता क्योंकि अंतिम परिणाम कुल मिलाकर एक बेहतर उत्तर है, जो कि एसओ का उद्देश्य है। मैं जहां भी संभव हो, श्रेय देने की कोशिश करता हूं, जैसा कि मैंने ट्रिनिथिस के मामले में किया था।
विलियम ब्रेंडेल

4
आपके पास केस 1 और 3 के उदाहरण हैं। क्या आप केस 2 का उदाहरण दे सकते हैं, जहां वर्तमान वर्ग का उदाहरण दूसरे वर्ग की पद्धति के तर्क के रूप में उपयोग किया जाता है?
dbconfession 21

4
@AStar अधिकांश जावा कोडबेस में मैंने वर्षों से काम किया है, thisइसका उपयोग केवल तभी किया जाता है यदि असंतुलन वास्तव में आवश्यक है, जैसे ऊपर मेरे सेटर उदाहरण में। कोडिंग शैलियों और "सर्वोत्तम प्रथाओं" के आधार पर व्यापक रूप से भिन्न हो सकते हैं जो आप पूछते हैं, निश्चित रूप से, लेकिन सामान्य तौर पर, मैं उचित पैटर्न चुनने और उनसे चिपके रहने की सलाह देता हूं। संगति, यहां तक ​​कि सिर्फ आंतरिक रूप से एक एकल कोडबेस के भीतर, पठनीयता और स्थिरता के लिए एक लंबा रास्ता तय करता है।
विलियम ब्रेंडल

71

दूसरा महत्वपूर्ण उपयोग this(एक स्थानीय चर के साथ छिपाने के रूप में कई उत्तर पहले से ही कहते हैं) तब होता है जब एक नेस्टेड गैर-स्थैतिक वर्ग से बाहरी उदाहरण तक पहुंच हो:

public class Outer {
  protected int a;

  public class Inner {
    protected int a;

    public int foo(){
      return Outer.this.a;
    }

    public Outer getOuter(){
      return Outer.this;
    }
  }
}

46

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

बेशक, उपयोग करने के लिए एक और अच्छा कारण thisयह है कि यह IDEs में पॉप अप करने के लिए मधुरता का कारण बनता है :)


1
लेकिन फिर आपको इसे देखने के बाद इसे बैकस्पेस देना होगा। प्रोग्रामिंग थका है!
लीजेंड लैंथ

25

क्वालीफायर का उपयोग करने की एकमात्र आवश्यकताthis. तब होती है जब मौजूदा दायरे के भीतर एक अन्य चर समान नाम साझा करता है और आप उदाहरण सदस्य (जैसे विलियम वर्णन) को संदर्भित करना चाहते हैं। इसके अलावा, व्यवहार में xऔर के बीच कोई अंतर नहीं है this.x


3
और यदि आपके पास डुप्लिकेट नाम हैं, तो आपके एक चर का नाम बदला जाना चाहिए क्योंकि यह लगभग निश्चित रूप से अनुचित रूप से नामित है। या बहुत कम से कम, बेहतर नाम दिया जा सकता है।
कैफ़ीक गीक

3
@Chad: जावा सेटर विधियों में यह आम बात है। हालाँकि, सेटर विधियों के बाहर, आपके कथन आम तौर पर रहते हैं।
विलियम ब्रेंडेल

2
आप this.xअपने कोड को थोड़ा और अधिक स्पष्ट रूप से पढ़ने के लिए उपयोग करना चाह सकते हैं , कोड की
स्थिरता

1
@ खाद: मैं उत्साह से पर्याप्त सहमत नहीं हो सकता। अच्छा भगवान, सिर्फ इसलिए कि "यह।" आपको दो अलग-अलग चर एक ही नाम देने की अनुमति देता है, आप क्यों करना चाहते हैं?
ब्लेयरहिप्पो

2
@ ब्लेयर: आपके उत्तर को पढ़ने से यह स्पष्ट हो जाता है कि आप सेटर के तरीकों में इस अभ्यास को पसंद नहीं करते हैं, लेकिन बहुत से लोग करते हैं (मैं खुद को उस सूची में शामिल करता हूं)। यदि मेरे पास एक सेटर विधि है जो एक मान लेता है, तो स्पष्ट रूप से पारित मूल्य "नया" मान है, इसलिए चर नाम में "नया" जोड़ने से लगता है कि सार्वजनिक एपीआई में अनावश्यक अतिरेक जोड़ना होगा।
एडम रॉबिन्सन

15

एक निर्माता को दूसरे से कॉल करते समय "यह" भी उपयोगी है:

public class MyClass {
    public MyClass(String foo) {
        this(foo, null);
    }
    public MyClass(String foo, String bar) {
        ...
    }
}

11

this बिल्डर पैटर्न में उपयोगी है।

public class User {

    private String firstName;
    private String surname;

    public User(Builder builder){
        firstName = builder.firstName;
        surname = builder.surname;
    }

    public String getFirstName(){
        return firstName;
    }

    public String getSurname(){
        return surname;
    }

    public static class Builder {
        private String firstName;
        private String surname;

        public Builder setFirstName(String firstName) {
            this.firstName = firstName;
            return this;
        }

        public Builder setSurname(String surname) {
            this.surname = surname;
            return this;
        }

        public User build(){
            return new User(this);
        }

    }

    public static void main(String[] args) {
        User.Builder builder = new User.Builder();
        User user = builder.setFirstName("John").setSurname("Doe").build();
    }

}

1
यह उस प्रकार का उत्तर था जैसा मैं चाहता था जब मैंने खोजा और यहां समाप्त हुआ, लेकिन आपके पास आपके कोड की कोई व्याख्या नहीं है, इसलिए अधिकांश लोग जो "इस" के बारे में पूछ रहे हैं, समझ नहीं पाएंगे कि "नया उपयोगकर्ता (यह) वापस क्या है?" इसका मतलब है, जैसा कि मैंने नहीं ...
nckbrz

बिल्डर पैटर्न का उपयोग निर्माण पर स्पष्ट रूप से मापदंडों को निर्दिष्ट करने के लिए किया जाता है। नया उपयोगकर्ता (स्ट्रिंग, स्ट्रिंग) होने के बजाय यह बताने का कोई आसान तरीका नहीं है कि कौन सा स्ट्रिंग था, आपके पास नया बिल्डर () होगा। सेट फ़र्स्टनेम ("जेन")। सेट उपनाम ("स्मिथ")। बिल्ड ()। आप इसे बिल्डर.सेट ... () फ़ंक्शन से वापस करते हैं ताकि आप उन्हें चेन कर सकें।
क्रिसपॉनिक्स

10

बहुत सारे अच्छे जवाब हैं, लेकिन thisहर जगह डालने के लिए एक और बहुत ही मामूली कारण है। यदि आपने एक सामान्य पाठ संपादक (जैसे नोटपैड आदि) से अपने स्रोत कोड खोलने की कोशिश की है, thisतो इसका उपयोग पढ़ने के लिए पूरी तरह से स्पष्ट हो जाएगा।

इसकी कल्पना करें:

public class Hello {
    private String foo;

    // Some 10k lines of codes

    private String getStringFromSomewhere() {
        // ....
    }

    // More codes

    public class World {
        private String bar;

        // Another 10k lines of codes

        public void doSomething() {
            // More codes
            foo = "FOO";
            // More codes
            String s = getStringFromSomewhere();
            // More codes
            bar = s;
        }
    }
}

यह किसी भी आधुनिक आईडीई के साथ पढ़ने के लिए बहुत स्पष्ट है, लेकिन यह एक नियमित पाठ संपादक के साथ पढ़ने के लिए कुल दुःस्वप्न होगा।

आप यह पता लगाने के लिए संघर्ष करेंगे कि कहाँ fooरहता है, जब तक आप संपादक के "खोज" फ़ंक्शन का उपयोग नहीं करते हैं। फिर तुम getStringFromSomewhere()उसी कारण चिल्लाओगे। अंत में, आप भूल गए हैं कि क्या sहै, जो bar = sआपको अंतिम झटका देने वाला है।

इसकी तुलना इस प्रकार करें:

public void doSomething() {
    // More codes
    Hello.this.foo = "FOO";
    // More codes
    String s = Hello.this.getStringFromSomewhere();
    // More codes
    this.bar = s;
}
  1. आप जानते हैं कि fooबाहरी वर्ग में घोषित एक चर है Hello
  2. आप जानते हैं कि getStringFromSomewhere()बाहरी वर्ग में भी घोषित विधि है।
  3. आप जानते हैं कि barयह Worldवर्ग का है, और sउस पद्धति में घोषित एक स्थानीय चर है।

बेशक, जब भी आप कुछ डिज़ाइन करते हैं, तो आप नियम बनाते हैं। इसलिए जब अपने एपीआई या परियोजना को डिजाइन करने, अपने नियमों में शामिल करता है, तो "किसी एक नोटपैड के साथ इन सभी स्रोत कोड को खोलता है, वह या वह उसे सिर में गोली मार चाहिए / खुद को," तो आप पूरी तरह से ठीक करने के लिए नहीं कर रहे हैं यह


शानदार जवाब @ जय
गौरव

शूट करने का पहला कारण कोड की कई 10k लाइनों के साथ कक्षाएं लिखना होगा, खासकर अगर कोड पहले से ही अलग-अलग कक्षाओं में
विभाजित

@LuCio लोल सच xD
जय

7

जब तक आपके पास परिवर्तनशील नामों की ओवरलैपिंग न हो, तब तक यह वास्तव में केवल स्पष्टता के लिए हो जब आप कोड पढ़ रहे हों।


1
जब आप लगातार thisकीवर्ड देखते हैं जब यह आवश्यक नहीं होता है तो यह केवल बॉयलरप्लेट कोड होता है जिससे कोड को पढ़ना मुश्किल हो जाता है।
एक्सपेक्टेक्ट

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

4
@AxeEffect मुझे पता है कि यह वास्तव में पुराना है लेकिन ... लामो thisको पढ़ने के लिए कोड को कठिन नहीं बनाता है।
Xatenev

4

@William Brendel उत्तर ने तीन अलग-अलग उपयोग मामलों को अच्छे तरीके से प्रदान किया।

केस 1 का प्रयोग करें:

इस पर ऑफिशियल जावा डॉक्यूमेंटेशन पेज समान उपयोग-मामले प्रदान करता है।

एक आवृत्ति विधि या एक निर्माता के भीतर, यह वर्तमान वस्तु का संदर्भ है - वह वस्तु जिसका विधि या निर्माता कहा जा रहा है। आप वर्तमान ऑब्जेक्ट के किसी भी सदस्य को उदाहरण विधि या निर्माणकर्ता से इसका उपयोग करके संदर्भित कर सकते हैं।

इसमें दो उदाहरण शामिल हैं:

एक फ़ील्ड के साथ इसका उपयोग करना और एक कन्स्ट्रक्टर के साथ इसका उपयोग करना

केस 2 का उपयोग करें:

अन्य उपयोग का मामला जो इस पोस्ट में उद्धृत नहीं किया गया है: thisडेटा और विधियों के महत्वपूर्ण अनुभाग की रक्षा के लिए एक बहु-थ्रेडेड एप्लिकेशन में वर्तमान ऑब्जेक्ट को सिंक्रनाइज़ करने के लिए उपयोग किया जा सकता है।

synchronized(this){
    // Do some thing. 
}

केस 3 का उपयोग करें:

बिल्डर पैटर्न का कार्यान्वयन thisसंशोधित वस्तु को वापस करने के उपयोग पर निर्भर करता है ।

इस पोस्ट को देखें

बिल्डर को अलग वर्ग में रखना (धाराप्रवाह इंटरफ़ेस)


2

Google ने Sun साइट पर एक पृष्ठ बनाया जो इस पर थोड़ी चर्चा करता है।

तुम चर के बारे में सही हो; thisवास्तव में एक वर्ग क्षेत्र से एक विधि चर को अलग करने के लिए इस्तेमाल किया जा सकता है।

    private int x;
    public void setX(int x) {
        this.x=x;
    }

हालांकि, मैं वास्तव में उस सम्मेलन से नफरत करता हूं । दो अलग-अलग चर को शाब्दिक रूप से समान नाम देना बग के लिए एक नुस्खा है। मैं बहुत कुछ पसंद करता हूँ:

    private int x;
    public void setX(int newX) {
        x=newX;
    }

एक ही परिणाम, लेकिन बग का कोई मौका नहीं के साथ जहां आप गलती से संदर्भित करते हैं xजब आप वास्तव में xइसके बजाय संदर्भित करना चाहते थे ।

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


4
यह एक सम्मेलन नहीं है, यह एक प्रोग्राम लैंग्वेज स्कूपिंग मैकेनिज्म है। आपने जो सूचीबद्ध किया है - newX (मैं पैरामीटर x के लिए pX पसंद करता हूं) का उपयोग करना एक सम्मेलन है।
बिल के

@ बिल के: मुझे समझ में नहीं आ रहा है कि आप क्या कर रहे हैं। मैं इनपुट चर x, या newX, या pX, या mangroveThroatWarblerX का नाम चुन सकता हूं। "नया" या "पी" या "ग्रैटीसूट मोंटी पाइथन सन्दर्भों" के अधिवेशन होते हुए, इसे एक कन्वेंशन के रूप में नाम देना नहीं है जिसे यह कन्वेंशन सेट कर रहा है।
ब्लेयरहिपो

3
"ग्राईटूटौड मोंटी पाइथन संदर्भ" एक सम्मेलन नहीं है, यह LAW है।
एडम रॉबिन्सन

+1: हम तर्क और विधि चर के लिए एक अलग नामकरण मानक का उपयोग इस कारण से वर्ग चर के लिए करते हैं। हम तर्कों / विधि संस्करणों को संक्षिप्त करते हैं और वर्ग / उदाहरण चर के लिए पूर्ण शब्दों का उपयोग करते हैं।
लॉरेंस Dol

1
एक नामकरण सम्मेलन का उपयोग करके इसे हल करना, हम्म, एक सम्मेलन है। भाषा की सुविधा का उपयोग करके इसे हल करना - मुझे लगता है कि उस भाषा की सुविधा का उपयोग कभी नहीं करना या हमेशा इसका उपयोग करना एक सम्मेलन होगा ... इसका उपयोग करना। हर बार जब आप एक सदस्य का उपयोग करेंगे तो एक सम्मेलन होगा। लगता है कि यह ज्यादा मायने नहीं रखता है, मुझे भी इससे नफरत है।
बिल के

2

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

  1. thisवर्तमान वर्ग उदाहरण चर को संदर्भित करने के लिए कीवर्ड का उपयोग करना
  2. का उपयोग करते हुए this()वर्तमान वर्ग निर्माता आह्वान करने के लिए
  3. thisवर्तमान वर्ग उदाहरण को वापस करने के लिए कीवर्ड का उपयोग करना
  4. thisकीवर्ड को विधि पैरामीटर के रूप में उपयोग करना

https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html


1

जब दो चर एक उदाहरण चर और एक ही नाम के अन्य स्थानीय चर होते हैं तो हम इसका उपयोग करते हैं। नामों के बीच संघर्ष से बचने के लिए वर्तमान निष्पादन ऑब्जेक्ट को संदर्भित करना।


1

thisवर्तमान वस्तु का संदर्भ है। इसका उपयोग कंस्ट्रक्टर में स्थानीय और वर्तमान वर्ग चर के बीच अंतर करने के लिए किया जाता है जिसका समान नाम है। उदाहरण के लिए:

public class circle {
    int x;
    circle(int x){
        this.x =x;
        //class variable =local variable 
    }
} 

thisएक कंस्ट्रक्टर को दूसरे कंस्ट्रक्टर से कॉल करने के लिए भी इस्तेमाल किया जा सकता है। उदाहरण के लिए:

public class circle {
    int x;

    circle() { 
        this(1);
    }

    circle(int x) {
        this.x = x; 
    }
}

0

यदि मैं "x" के बजाय "x" का उपयोग करता हूं, तो क्या कुछ विधियों में कोई अंतर होगा?

आमतौर पर नहीं। लेकिन इससे कभी-कभी फर्क पड़ता है:

  class A {
     private int i;
     public A(int i) {
        this.i = i; // this.i can be used to disambiguate the i being referred to
     }
  }

यदि मैं बस "विधि ()" का उपयोग करता हूं, तो क्या यह डिफ़ॉल्ट रूप से, वर्तमान ऑब्जेक्ट पर लागू नहीं होगा?

हाँ। लेकिन यदि आवश्यक हो, तो this.method()स्पष्ट करता है कि कॉल इस ऑब्जेक्ट द्वारा किया गया है।


0

thisपरिणामी कोड को प्रभावित नहीं करता है - यह संकलन समय ऑपरेटर है और इसके साथ या इसके बिना उत्पन्न कोड समान होगा। आपको इसका उपयोग कब करना है, यह संदर्भ पर निर्भर करता है। उदाहरण के लिए आपको इसका उपयोग करना होगा, जैसा कि आपने कहा, जब आपके पास स्थानीय चर है जो छाया वर्ग चर है और आप वर्ग चर का संदर्भ चाहते हैं और स्थानीय नहीं।

संपादित करें: "परिणामी कोड समान होगा" मैं निश्चित रूप से इसका मतलब है, जब स्थानीय दायरे में कुछ चर वर्ग से संबंधित नहीं छिपाते हैं। इस प्रकार

class POJO {
   protected int i;

   public void modify() {
      i = 9;
   }

   public void thisModify() {
      this.i = 9;
   }
}

दोनों विधियों का परिणामी कोड समान होगा। अंतर यह होगा कि यदि कोई विधि समान नाम के साथ स्थानीय चर घोषित करती है

  public void m() {
      int i;
      i = 9;  // i refers to variable in method's scope
      this.i = 9; // i refers to class variable
  }

0

के संबंध में विलियम Brendel की पोस्ट और dbconfessions सवाल है, के बारे में मामला 2 । यहाँ एक उदाहरण है:

public class Window {

  private Window parent;

  public Window (Window parent) {
    this.parent = parent;
  }

  public void addSubWindow() {
    Window child = new Window(this);
    list.add(child);
  }

  public void printInfo() {
    if (parent == null) {
      System.out.println("root");
    } else {
      System.out.println("child");
    }
  }

}

मैंने इसका उपयोग तब देखा है, जब वस्तुओं के साथ माता-पिता के संबंध का निर्माण करते हैं। हालांकि, कृपया ध्यान दें कि यह संक्षिप्तता के लिए सरलीकृत है।


0

“जावा में यह कीवर्ड वर्तमान क्लास ऑब्जेक्ट्स को संदर्भित करने के लिए उपयोग किया जाता है।

जावा में "इस" कीवर्ड के 6 उपयोग हैं

  1. एक्सेसिंग क्लास लेवल वैरिएबल : ज्यादातर इस्तेमाल किया जाता है अगर लोकल और क्लास लेवल वैरिएबल एक ही हो
  2. कक्षा के तरीकों तक पहुँच : यह डिफ़ॉल्ट व्यवहार है और इसे अनदेखा किया जा सकता है
  3. उसी कक्षा के अन्य कंस्ट्रक्टर को बुलाने के लिए
  4. 'इस' कीवर्ड को रिटर्न वैल्यू के रूप में उपयोग करना : विधि से वर्तमान उदाहरण को वापस करने के लिए
  5. पासिंग टू मेथड टू लॉजिक टू लॉजिक टू मेथिंग पासिंग: करंट क्लास इंस्टेंस पासिंग फॉर लॉजिक
  6. इस कीवर्ड को तर्ककर्ता के रूप में : वर्तमान वर्ग उदाहरण को तर्क के रूप में पारित करने के लिए

रेफरी: https://stacktraceguru.com/java/this-keyword-in-java


-8

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

यदि आपकी वस्तु थ्रेड सुरक्षा से संबंधित नहीं है, तो यह निर्दिष्ट करने का कोई कारण नहीं है कि किस सदस्य के मूल्य का उपयोग किया जाता है।


यह वास्तव में मामला नहीं है। मुझे यकीन नहीं है कि आप किस मामले में सोच रहे हैं, लेकिन एक उदाहरण यह समझने में मददगार हो सकता है कि आप क्या कहना चाह रहे हैं।
डेविड बर्गर

1
हाँ। मुझे पता है कि आप जो समझा रहे हैं उसमें धागा सुरक्षा शामिल है। इस सवाल का कोई सही जवाब नहीं है जिसमें थ्रेड सुरक्षा शामिल है। यदि "यह" सही वस्तु को संदर्भित करने के लिए आवश्यक है, तो एक बार ऐसा करने पर, विधि या विशेषता थ्रेड सुरक्षित होगी यदि और केवल अगर यह सिंक्रनाइज़ किया गया है। यदि संदर्भ सभी अस्पष्ट है, तो यह अस्पष्ट होगा कि बहु-सूत्रण एक मुद्दा है या नहीं।
डेविड बर्जर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.