2015-02-26 10 views
6

निम्नलिखित जावा कोडस्विच केस स्टेटमेंट में जावा स्कोप घोषणाएं कैसे होती हैं?

public static void main(String[] args) { 
    int x = 5; 

    switch(x) { 
     case 4: 
      int y = 3423432; 
      break; 
     case 5: { 
      y = 33; 
     } 
    } 
} 

जावा 1.7 में त्रुटि के बिना निष्पादित करता है कैसे पता कि y जावा आंकड़ा किसी पूर्णांक के बाद से घोषणा चलाने हो जाता है कभी नहीं है करता है। क्या केस स्टेटमेंट के भीतर वैरिएबल की घोषणा स्विच स्टेटमेंट स्तर पर पहुंच जाती है जब किसी केस स्टेटमेंट में ब्रेसिज़ का उपयोग नहीं किया जाता है?

+0

मेरा मानना ​​है कि परिवर्तनीय पूरे स्विच के दायरे में घोषित किया गया है न कि केवल मामला। मुझे यकीन नहीं है लेकिन मुझे लगता है कि यह हो रहा है। – StackFlowed

+1

इसी प्रकार के सवाल उठाया गया था से पहले: /: http://stackoverflow.com/questions/10810768/declaring-and-initializing-variables-within-java-switches – DonatasD

+1

आशा इस लिंक आपके सवाल का http के लिए जवाब देंगे /stackoverflow.com/questions/3894119/variables-scope-in-a-switch-case –

उत्तर

9

घोषणाएं "रन" नहीं हैं - वे कुछ ऐसा नहीं हैं जिन्हें निष्पादित करने की आवश्यकता है, वे केवल कंपाइलर को एक चर के प्रकार बताते हैं। (एक प्रारंभकर्ता चलाएगा, लेकिन यह ठीक है - आप इसे मान निर्दिष्ट करने से पहले चर से पढ़ने की कोशिश नहीं कर रहे हैं।)

स्विच स्टेटमेंट के भीतर स्कॉइंग निश्चित रूप से विषम है, लेकिन मूल रूप से पहले case में घोषित चर अभी भी दूसरे case में दायरे में है।

section 6.3 of the JLS से

:

एक ब्लॉक (§14.4) में एक स्थानीय चर घोषणा के दायरे घोषणा प्रकट होता है, जिसमें, करने के लिए अपने स्वयं के प्रारंभकर्ता के साथ शुरू और किसी भी आगे declarators सहित ब्लॉक के बाकी है स्थानीय परिवर्तनीय घोषणा कथन में सही।

जब तक आप अतिरिक्त ब्लॉक नहीं बनाते, तो संपूर्ण स्विच स्टेटमेंट एक ब्लॉक होता है। यदि आप प्रत्येक मामले के लिए एक नया दायरा चाहते हैं, तो आप ब्रेसिज़ का उपयोग कर सकते हैं:

case 1: { 
    int y = 7; 
    ... 
} 
case 2: { 
    int y = 5; 
    ... 
} 
1

केस स्वयं स्कोप घोषित नहीं करता है। दायरा { और } तक सीमित है। इसलिए, आपके चर y को बाहरी दायरे (पूरे स्विच के) में परिभाषित किया गया है और आंतरिक दायरे में अपडेट किया गया है (case 5 का)।

0

जैसा कि मुझे पता है कि पूर्ण स्विच स्टेटमेंट एक गुंजाइश है। ब्रेक के बिना; या वापसी; कथन अन्य स्विच मामलों का भी व्याख्या किया जाएगा। तो जब आप स्विच कथन के अंदर एक चर परिभाषित करते हैं तो यह छेद स्विच केस में दिखाई देता है।

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