2013-05-01 16 views
6

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

उदाहरण के लिए, अगर हम # 4 यहाँ देखो: http://apcentral.collegeboard.com/apc/public/repository/ap_frq_computerscience_12.pdf

और हम यहाँ समाधान पर नज़र डालें: http://apcentral.collegeboard.com/apc/public/repository/ap12_computer_science_a_q4.pdf

हम देखते हैं कि एक समाधान एक हिस्सा करने के)

public int countWhitePixels() { 
int whitePixelCount = 0; 
    for (int[] row : this.pixelValues) { 
     for (int pv : row) { 
     if (pv == this.WHITE) { 
     whitePixelCount++; 
     } 
    } 
    } 
return whitePixelCount; 
} 
है

जबकि दूसरा समाधान

public int countWhitePixels() { 
int whitePixelCount = 0; 
    for (int row = 0; row < pixelValues.length; row++) { 
     for (int col = 0; col < pixelValues[0].length; col++) { 
     if (pixelValues[row][col] == WHITE) { 
     whitePixelCount++; 
    } 
    } 
} 
return whitePixelCount; 
} 

मेरा प्रश्न यहां है। ऐसा क्यों है कि वे "यह" का उपयोग करते हैं। पहले समाधान में pixelValues ​​और यहां तक ​​कि सफेद तक पहुंचने पर उपसर्ग, लेकिन दूसरे में नहीं? मैंने सोचा "यह" निहित था, तो क्या मैं यह कहने में सही हूं। पहले समाधान के लिए बिल्कुल जरूरी नहीं है?

आप आपकी मदद के लिए बहुत बहुत धन्यवाद :)

+0

Termionogly करें। जावा में कोई 'कमांड' नहीं है, और 'यह' उनमें से एक नहीं है। "पठनीयता" सहित बनाने के लिए – EJP

उत्तर

1

जब एक विधि पैरामीटर का नाम अपनी कक्षा डेटा सदस्य में से एक के रूप में ही है, फिर, डेटा सदस्य को संदर्भित करने के लिए, आपको इससे पहले this. डालना होगा। उदाहरण के लिए, समारोह setA() में:

public void setA(int a) 
{ 
    this.a = a; 
} 

के बाद से दोनों डेटा सदस्य और विधि के papameter डेटा सदस्य का उल्लेख करने के a नाम पर है,, आप this.a उपयोग करना होगा। अन्य मामलों में, इसकी आवश्यकता नहीं है।

और, आपके मामले में, मुझे नहीं लगता कि this का उपयोग करना आवश्यक है, हालांकि इसका उपयोग करने के लिए कोई नुकसान नहीं है।

0

this कक्षा के उदाहरण का संदर्भ लें। उदाहरण:

private String name, car; 

public class Car(String name, String color) 
{ 
    this.name = name; 
    this.color = color; 
} 
6

this के साथ, आप स्पष्ट रूप से वस्तु स्थिति में आपको हैं देखें। आप इसे केवल विधियों या प्रारंभिक ब्लॉक में ही कर सकते हैं, लेकिन आप static विधियों या कक्षा प्रारंभकर्ता ब्लॉक में ऐसा नहीं कर सकते हैं।

जब आपको इसकी आवश्यकता हो?

केवल वही मामलों में जब एक ही नामित चर (स्थानीय चर या विधि पैरामीटर) छिपाने की घोषणा करता है। उदाहरण के लिए:

private int bar; 
public void setBar(int bar) { 
    this.bar = bar; 
} 

यहां विधि पैरामीटर इंस्टेंस प्रॉपर्टी छुपा रहा है।

जब कोडर इसका उपयोग करते थे?

पठनीयता में सुधार करने के लिए, यह एक आम प्रथा है कि प्रोग्रामर this. योग्यता प्रॉपर्टी एक्सेस करने से पहले क्वालीफायर को प्रीपेड करते हैं। जैसे:

public int getBar() { 
    return this.bar; 
    // return bar; // <-- this is correct, too 
} 
+2

+1। मुझे लगता है कि कोड पठनीयता को पर्याप्त तनाव नहीं दिया जा सकता है। उदाहरण में (एक साधारण एक्सेसर विधि) यह शायद अधिक है, लेकिन ऐसी कई स्थितियां हैं जहां यह पठनीयता में काफी सुधार करती है। – GreyBeardedGeek

+0

आईएमओ 'this.bar वापस करें;' वापसी बार की तुलना में कम पठनीय है; '। यह सिर्फ और अव्यवस्था है। –

+0

@SteveKuo से सहमत, आपको आईडीई को स्थानीय चर और वर्ग विशेषताओं के बीच रंग योजनाओं के माध्यम से अलग-अलग करने की देखभाल करना चाहिए, प्रत्येक समय के बजाय 'यह' कीवर्ड को वर्बोजिटी जोड़ने के अलावा मैन्युअल रूप से वास्तविक उपयोग किए बिना। @ ग्रेबेर्डेड गीक: क्या आप विकास के लिए नोटपैड या _proper_ आईडीई का उपयोग करते हैं? ;-) – klaar

4

से The Java™ Tutorials

इस का उपयोग करते हुए एक फील्ड

क्योंकि एक क्षेत्र एक विधि या निर्माता पैरामीटर द्वारा छाया है इस कीवर्ड प्रयोग करने के लिए सबसे आम कारण है के साथ।

उदाहरण के लिए, प्वाइंट वर्ग इस

public class Point { 
    public int x = 0; 
    public int y = 0; 

    //constructor 
    public Point(int a, int b) { 
     x = a; 
     y = b; 
    } 
} 

की तरह लिखा गया था, लेकिन यह इस तरह लिखा गया हो सकता:

public class Point { 
    public int x = 0; 
    public int y = 0; 

    //constructor 
    public Point(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 
} 
संबंधित मुद्दे