2012-04-30 15 views
5

मैं कोड का निम्न भाग है कि सूर्य प्रमाणित जावा प्रोग्रामर के लिए एक नकली परीक्षा से लिया जाता है है:जावा स्थिर scoping

System.out.println(x + y + ++x); 
:

public class Static 
{ 
     static 
     { 
      int x = 5; 
     } 

     static int x,y; 
     public static void main(String args[]) 
     { 
      x--; myMethod(); 
      System.out.println(x + y + ++x); 
     } 

     public static void myMethod() 
     { 
      y = x++ + ++x; 
     } 
} 

परीक्षण इस लाइन के परिणाम के लिए आपसे पूछता है

जवाब 3 है, लेकिन मैं पूरी तरह से समझ में नहीं आता क्यों यह 3. है मुझे लगता है कि इस सवाल का जवाब पर पहुंच सकते हैं, तो मैं पूरी तरह से उपेक्षा:

 static 
     { 
      int x = 5; 
     } 

मेरा सवाल है, उपर्युक्त कोड स्निपेट का अर्थ क्या है? यह चर 'x' के मान को क्यों नहीं बदलता है?

उत्तर

4

जो स्थिर प्रारंभिक ब्लॉक है। लेकिन यह वास्तव में इस संदर्भ में कोई फर्क नहीं पड़ता क्योंकि यह एक चरणीय स्थानीय के मान को संशोधित कर रहा है।

+2

@anonymous है, धन्यवाद मैं समझ गया । यह scoped है, तो चर के दायरे के बाद चर मौजूद नहीं है। – czchlong

5

int x = 5; निष्पादित हो जाता है, लेकिन x यहां एक स्थानीय चर है, न कि static int x सदस्य।

0

एक्स के मूल्य 5 के लिए सेट है, लेकिन केवल स्थिर ब्लॉक के संदर्भ

static 
     { 
      int x = 5; 
     } 

चर x static int x,y; में घोषित भीतर वर्ग-स्तर का दायरा है, और कोड है कि संदर्भ के बाकी से प्रभावित होता है यह।

1

यह एक स्थिर ब्लॉक है इसलिए आपके द्वारा परिभाषित चर { और } के दायरे से आगे नहीं जा सकते हैं। काम करता है -इन कि तरीकों के रूप में एक ही तरह से

1

यह स्थानीय x बुलाया चर के मूल्य में परिवर्तन sense-, लेकिन नहीं स्थिर सदस्य क्षेत्र कहा जाता x यह यानी सिर्फ 0.

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