2012-01-19 15 views
6

this पॉइंटर पॉइंट ऑब्जेक्ट को ही कैसे इंगित करता है? क्या यह जावा क्रियान्वयन है या यह एक कंपाइलर कार्यान्वयन है?जावा "यह" कीवर्ड कैसे कार्यान्वित किया जाता है?

+0

यहाँ हम 'इस' के बारे में सबसे मिल सकता है। http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#251519 – kosa

उत्तर

1

खैर अगर आप क्यों संकलक

class HelloWorld 
{ 
    private String hello = "Hello world!"; 

    private void printHello(){ 
    System.out.println (this.hello); 
} 

public static void main (String args[]){ 
    HelloWorld hello = new HelloWorld(); 
    hello.printHello(); 
} 

}

संकलित

% JAVA_HOME%/bin/javac HelloWorld.java

का उपयोग करके जनरेट बाइट कोड को देखने नहीं रुचि रखते हैं

javap -c HelloWorl का उपयोग करके बाइटकोड प्राप्त करें घ

संपादित ऐड उत्पादन

enter code here 

HelloWorld(); 
Code: 
0: aload_0 
1: invokespecial #1; //Method java/lang/Object."<init>":() 
4: aload_0 
5: ldc  #2; //String Hello world! 
7: putfield  #3; //Field hello:Ljava/lang/String; 
10: return 

public static void main(java.lang.String[]); 
Code: 
0: new  #6; //class HelloWorld 
3: dup 
4: invokespecial #7; //Method "<init>":()V 
7: astore_1 
8: aload_1 
9: invokespecial #8; //Method printHello:()V 
12: return 

}

3

दार्शनिक प्रश्न की तरह लगता है। मुझे यकीन नहीं है कि जावा कार्यान्वयन है।

this जेएलएस में परिभाषित किया गया है और जावा में एक कीवर्ड है और संकलन को उस मानक का पालन करना है। आप

object.method(args) 

की तरह एक विधि है जब वास्तव बाइट कोड में कहा जाता है एक तरीका है जिसके लग रहा है

method(object, args); 

जहां this पहला तर्क है की तरह।

जेवीएम स्तर पर, पैरामीटर के नाम नहीं हैं और यदि वास्तव में इसका उपयोग नहीं किया जाता है तो जेआईटी तर्क को दूर कर सकता है।

+0

:) कोई पीटर नहीं। इस सवाल के साथ साक्षात्कार में उछाल आया। इसे जांचने के बहुत सारे। – mavrav

+0

कभी-कभी साक्षात्कार में आपको खराब शब्दों के प्रश्न मिलते हैं। यह एक संकेत हो सकता है कि साक्षात्कारकर्ता को या तो जवाब नहीं पता है, और सिर्फ यह जानना चाहता है कि आप क्या कहते हैं। –

+1

जब तक पोस्टिंग में शामिल नहीं किया जा रहा है, तो आप एक JVM कार्यान्वयन पर काम कर रहे हैं, यह एक भयानक सवाल है! – vaughandroid

7

जेवीएम बाइटकोड में, स्थानीय चर 0 (मूल रूप से 0 पंजीकृत) एक विधि लागू होने पर वर्तमान ऑब्जेक्ट को इंगित करता है। कंपाइलर स्थानीय चर के लिए this का उपयोग करता है।

तो मुझे लगता है कि उत्तर यह है कि संकलक this लागू करता है।

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