2013-01-02 36 views
8

संभव डुप्लिकेट:
How come invoking a (static) method on a null reference doesn’t throw NullPointerException?जावा में स्थिर विधि बुला

किसी भी एक व्याख्या कर सकते हैं क्यों निम्नलिखित कार्यक्रम के उत्पादन में है "नामक"

public class Test4{ 

    public static void method(){ 
    System.out.println("Called"); 
    } 

    public static void main(String[] args){ 
    Test4 t4 = null; 
    t4.method(); 
    } 
} 

मुझे पता है कि हम क्लास संदर्भ के साथ स्थिर विधि को कॉल कर सकते हैं, लेकिन एच क्या मैं शून्य संदर्भ का उपयोग कर कॉल कर रहा हूं। मेरी संदेह

उत्तर

13

कृपया स्पष्ट बाइट कोड

Test4 t4 = null; 
t4.method(); 

में

Test4 t4 = null; 
Test4.method(); 

संकलक स्थिर तरीकों के लिए वर्ग के नाम के साथ कॉल बदल जाएगा किया जाएगा। SO पर इस question का संदर्भ लें जिसे मैंने स्वयं से पूछा है।

0

कक्षाबद्ध नाम या उदाहरण के माध्यम से स्टेटिक विधियों को बुलाया जा सकता है। मैं उन्हें एक उदाहरण से कॉल करने से बचने की कोशिश करता हूं (बहुत सारे टूल आपको खराब अभ्यास के कारण ऐसा करने की चेतावनी देते हैं)।

2

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

हर स्थिर विधि एक वर्ग विधि साथ बराबर है।

इससे कोई फर्क नहीं पड़ता कि जब तक आप स्थिर विधियों या सदस्यों के साथ काम कर रहे हैं, तो इससे कोई फर्क नहीं पड़ता।