Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

क्या Java प्रोग्राम को बिना main मेथड के निष्पादित कर सकते हैं?


हां, हम static ब्लॉक का उपयोग करके main मेथड के बिना Java प्रोग्राम निष्पादित कर सकते हैं।

Java में स्टैटिक ब्लॉक स्टेटमेंट्स का एक समूह है जो केवल एक बार निष्पादित होता है जब क्लास Java ClassLoader द्वारा मेमोरी में लोड की जाती है। इसे स्टैटिक इनिशियलाइजेशन ब्लॉक के रूप में भी जाना जाता है। स्टैटिक इनिशियलाइजेशन ब्लॉक सीधे स्टैक मेमोरी में जाता है।

उदाहरण

class StaticInitializationBlock {
    static {
        System.out.println("class without a main method");
        System.exit(0);
    }
}

उपरोक्त उदाहरण में, हम main मेथड के बिना Java प्रोग्राम निष्पादित कर सकते हैं (Java 1.6 वर्जन तक काम करता है)। Java 7 और नए वर्जन इसकी अनुमति नहीं देते क्योंकि JVM क्लास को इनिशियलाइज़ करने से पहले main मेथड की उपस्थिति की जांच करता है।

आउटपुट (Java 6 तक)

class without a main method.

महत्वपूर्ण: संस्करण-निर्भर व्यवहार

Java 7+ में त्रुटि

Error: Main method not found in class StaticInitializationBlock, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application

Static ब्लॉक के वैध उपयोग (main के साथ)

हालांकि main के बिना चलाना अब संभव नहीं, static ब्लॉक के महत्वपूर्ण उपयोग हैं:

1. स्टेटिक वेरिएबल इनिशियलाइजेशन

public class DatabaseConfig {
    private static String url;
    private static String username;
    private static String password;
    
    static {
        // कॉन्फिग फाइल/एन्वायरनमेंट से पढ़ें
        try (InputStream is = DatabaseConfig.class.getResourceAsStream("/config.properties")) {
            Properties props = new Properties();
            props.load(is);
            url = props.getProperty("db.url");
            username = props.getProperty("db.user");
            password = props.getProperty("db.pass");
        } catch (IOException e) {
            throw new ExceptionInInitializerError(e);
        }
    }
}

2. नेटिव लाइब्रेरी लोड करना

public class NativeLib {
    static {
        System.loadLibrary("mylib"); // .so/.dll लोड
    }
    
    public native void doSomething();
}

3. सिंगलटन पैटर्न में ईगर इनिशियलाइजेशन

public class Singleton {
    private static final Singleton INSTANCE = new Singleton();
    
    private Singleton() { /* निजी कंस्ट्रक्टर */ }
    
    public static Singleton getInstance() {
        return INSTANCE;
    }
}

System.exit(0) का महत्व

उदाहरण में System.exit(0) इसलिए है क्योंकि Java 6 में static ब्लॉक चलने के बाद JVM main ढूंढता, नहीं मिलने पर त्रुटि देता। System.exit(0) प्रोग्राम को साफ़ी से समाप्त कर देता है।

निष्कर्ष: आधुनिक Java (7+) में main मेथड अनिवार्य है। static ब्लॉक का उपयोग क्लास इनिशियलाइजेशन लॉजिक के लिए किया जाता है, प्रोग्राम एंट्री पॉइंट के रूप में नहीं।

  1. Java में pack() मेथड का उपयोग कब कर सकते हैं? Java में pack() मेथड का उपयोग कब कर सकते हैं?

    pack() मेथड Java में Window क्लास में परिभाषित है और यह फ्रेम को इस तरह आकार देता है कि इसकी सभी सामग्री उनके पसंदीदा आकार पर या उससे ऊपर हैं। pack() मेथड का एक विकल्प setSize() या setBounds() मेथड्स को कॉल करके फ्रेम आकार को स्पष्ट रूप से स्थापित करना है। सामान्य तौर पर, pack() मेथड का उपयोग setSiz

  1. जावा में invokeLater() मेथड को कैसे कॉल करें? जावा में invokeLater() मेथड को कैसे कॉल करें?

    invokeLater() मेथड SwingUtilities क्लास का एक स्टैटिक मेथड है और इसका उपयोग AWT इवेंट डिस्पैचर थ्रेड में असिंक्रोनसली कार्य करने के लिए किया जा सकता है। SwingUtilities.invokeLater() मेथड SwingUtilities.invokeAndWait() की तरह काम करता है सिवाय इसके कि यह अनुरोध को इवेंट क्यू पर रखता है और तुरंत वापस

  1. - क्या हम Java में final मेथड को इनहेरिट कर सकते हैं

    हां, एक final मेथड इनहेरिट होता है लेकिन इसे ओवरराइड नहीं किया जा सकता।

© कॉपीराइट https://in.wsxdn.com सर्वाधिकार सुरक्षित
Java संस्करणव्यवहार
Java 1.6 और पहलेकाम करता है - static ब्लॉक निष्पादित होता है, फिर main ढूंढता है (नहीं मिलने पर भी चलता है अगर System.exit हो)
Java 7+काम नहीं करता - JVM पहले main मेथड खोजता है, नहीं मिलने पर त्रुटि देता है