2010-03-20 16 views
7

हमारे पास स्थाई अंतिम सदस्य क्यों हो सकते हैं लेकिन एक स्थैतिक आंतरिक कक्षा में स्थिर विधि नहीं हो सकती है?हमारे पास स्थिर अंतिम सदस्य क्यों हो सकते हैं लेकिन आंतरिक कक्षा में स्थिर विधि नहीं हो सकती है?

क्या हम आंतरिक कक्षा के तत्काल बिना बाहरी वर्ग के बाहरी कक्ष के स्थिर अंतिम सदस्य चर का उपयोग कर सकते हैं?

उत्तर

7

आपके पास स्थिर "आंतरिक" कक्षा में स्थैतिक विधि हो सकती है।

public class Outer { 
    static String world() { 
     return "world!"; 
    } 
    static class Inner { 
     static String helloWorld() { 
      return "Hello " + Outer.world(); 
     } 
    } 
    public static void main(String args[]) { 
     System.out.println(Outer.Inner.helloWorld()); 
     // prints "Hello world!" 
    } 
} 

सटीक होना, तथापि, Inner एक नेस्टेड वर्ग JLS शब्दावली (8.1.3) के अनुसार कहा जाता है:

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


इसके अलावा, यह है नहीं बिल्कुल सच एक आंतरिक वर्ग static final सदस्यों हो सकता है; अधिक सटीक होने के लिए, उन्हें संकलन-समय स्थिरांक होना चाहिए।

public class InnerStaticFinal { 
    class InnerWithConstant { 
     static final int n = 0; 
     // OKAY! Compile-time constant! 
    } 
    class InnerWithNotConstant { 
     static final Integer n = 0; 
     // DOESN'T COMPILE! Not a constant! 
    } 
} 

कारण है कि संकलन समय स्थिरांक इस संदर्भ में अनुमति दी जाती है स्पष्ट है:: वे संकलन समय पर inlined कर रहे हैं निम्नलिखित उदाहरण अंतर को दिखाता है।

+0

संकलन-समय-इन-लाइनिंग एक कार्यान्वयन विस्तार है। अधिक महत्वपूर्ण यह तथ्य है कि जिन मामलों में कोड कानूनी रूप से उपयोग कर सकता है, एक स्थिर स्थैतिक क्षेत्र का व्यवहार जो निरंतर के साथ लोड होता है वह स्थिर आवृत्ति फ़ील्ड के व्यवहार से अलग नहीं होता है जो उसी स्थिरता से भरा होता है। गैर स्थैतिक आंतरिक वर्ग के स्थिर सदस्यों का उचित व्यवहार संदिग्ध होगा, लेकिन स्थैतिक अंतिम क्षेत्रों को स्थिरांक के साथ लोड किया जाएगा, अस्पष्टता को हल करने के दोनों संभावित तरीकों से एक ही परिणाम मिलेगा। – supercat

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

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