मैं सोच रहा था कि क्या इसका कोई फायदा है

public static main(String[] args)
{
    Main mainInstance = new Main();
    mainInstance.Foo();
}

public void Foo() {}

इस पर

public static main(String[] args)
{
    Foo();
}

public static void Foo() {}

एक दूसरे उदाहरण के लिए उपयोग किया जाता है, लेकिन मुझे कोड का एक टुकड़ा मिला जो पहले उदाहरण की तरह है, और यह जानने के लिए उत्सुक है कि क्या इसका दूसरे पर कोई लाभ है

0
Mina Messiah 4 फरवरी 2020, 09:38

2 जवाब

सबसे बढ़िया उत्तर

एक तुच्छ उदाहरण में (आपके नमूने की तरह), कोई अंतर नहीं है।

अधिक सामान्यतः, मैं पहले दृष्टिकोण में दूसरे की तुलना में दो लाभों के बारे में सोच सकता हूँ:

  1. मान लें कि foo विधियां और अन्य संलग्न वर्ग के क्षेत्रों में रखी गई जानकारी का उपयोग करते हैं। यदि विधियाँ static हैं, तो फ़ील्ड भी static होने चाहिए। यह एक अच्छी तरह से स्थापित तथ्य है कि स्थिर चर इकाई परीक्षण को कठिन बनाते हैं। पहला तरीका main और अन्य तरीकों के परीक्षण के लिए इस समस्या से बचा जाता है।

  2. मान लें कि संलग्न वर्ग (Main) द्वारा प्रदान की गई कार्यक्षमता गैर-तुच्छ है, और आप इसका पुन: उपयोग करने में सक्षम होना चाहते हैं। यदि आप अपना कोड इस तरह बनाते हैं:

    public class Main {
    
        public static main(String[] args) {
            Main main = new Main();
            // parse 'args' and set config parameters in 'Main' fields 
            main.doIt();
        }
    
        public void doIt() {
            ...
        }
    }
    

    तो आप अन्य तरीकों से main की कार्यक्षमता का उपयोग कर सकते हैं। उदाहरण के लिए, आप इसे इस तरह इस्तेमाल कर सकते हैं:

    Main.main(new String[]{"arg1", "arg2"});
    

    या इस तरह:

    Main m = new Main();
    m.setConfigParam1(...);
    m.setConfigParam2(...);
    m.doIt();
    

    इंस्टेंस और इंस्टेंस फ़ील्ड का उपयोग करने से आपको अधिक लचीलापन मिलता है।

ये महत्वपूर्ण हैं या नहीं यह संदर्भ पर निर्भर करेगा।

1
Stephen C 4 फरवरी 2020, 10:42

स्टैटिक मेथड्स/वैरिएबल को स्टैटिक मेमोरी में स्टोर किया जाता है। वे हमेशा स्मृति में रहते हैं, भले ही इन विधियों/चरों का एक बार उपयोग न किया गया हो। इसलिए यदि कोई कोड है जो बड़ी मेमोरी का उपयोग कर रहा है, तो उन्हें स्थिर घोषित करना उचित नहीं है। दूसरी ओर यदि पूरी निष्पादन प्रक्रिया के दौरान कुछ विधियों को शायद ही कभी बुलाया जाता है, और वस्तु की स्थिति पर निर्भर नहीं होते हैं, तो इसे स्थिर घोषित किया जा सकता है। यह वस्तु, उसके वर्ग चर, आदि घोषित करने के लिए स्मृति को बचाएगा।

0
Rahul Agrawal 4 फरवरी 2020, 09:51