हां, हम Java में main मेथड को private घोषित कर सकते हैं।
यह बिना किसी त्रुटि के सफलतापूर्वक कंपाइल हो जाता है लेकिन रनटाइम पर यह कहता है कि main मेथड पब्लिक नहीं है।
उदाहरण
class PrivateMainMethod {
private static void main(String args[]) {
System.out.println("Welcome to Tutorials Point");
}
}
उपरोक्त कोड कंपाइल टाइम पर सफलतापूर्वक काम करता है लेकिन रनटाइम पर त्रुटि फेंकेगा।
आउटपुट (रनटाइम त्रुटि)
Error: Main method not found in class PrivateMainMethod, please define the main method as: public static void main(String[] args) or a JavaFX application class must extend javafx.application.Application
क्यों कंपाइल होता है लेकिन रन नहीं होता?
| चरण | क्या होता है |
|---|---|
| कंपाइल टाइम | कंपाइलर केवल सिंटैक्स जांचता है। private static void main(String[]) वैध सिंटैक्स है। |
| क्लास लोडिंग | JVM क्लास लोड करता है और main मेथड ढूंढता है। |
| एंट्री पॉइंट खोज | JVM विशेष रूप से public static void main(String[]) सिग्नेचर ढूंढता है। |
| एक्सेस चेक | private मेथड JVM के लिए दृश्यमान नहीं है (बाहरी दुनिया से छिपा हुआ)। |
| परिणाम | JVM एंट्री पॉइंट नहीं ढूंढ पाता और त्रुटि फेंकता है। |
main मेथड के लिए आवश्यक सिग्नेचर
public static void main(String[] args)
- public: JVM (बाहरी) द्वारा एक्सेसिबल होना चाहिए।
- static: ऑब्जेक्ट बनाए बिना कॉल करने योग्य होना चाहिए।
- void: JVM को कोई मान वापस नहीं करता।
- main: निश्चित नाम जिसे JVM ढूंढता है।
- String[] args: कमांड लाइन आर्गुमेंट्स स्वीकार करता है।
वैकल्पिक वैध सिग्नेचर्स (Java 5+)
// Varargs सिंटैक्स public static void main(String... args) // पूर्ण रूप से योग्य public static void main(java.lang.String[] args)
अन्य एक्सेस मॉडिफायर्स के साथ व्यवहार
| मॉडिफायर | कंपाइल | रन | नोट |
|---|---|---|---|
| public | ✓ | ✓ | मानक, सही |
| private | ✓ | ✗ | JVM देख नहीं सकता |
| protected | ✓ | ✗ | JVM देख नहीं सकता (सबक्लास/पैकेज के बाहर) |
| default (package-private) | ✓ | ✗ | JVM देख नहीं सकता (पैकेज के बाहर) |
निष्कर्ष: main मेथड अवश्य public होना चाहिए। private (या अन्य गैर-पब्लिक मॉडिफायर) कंपाइल तो हो जाएगा लेकिन JVM एंट्री पॉइंट नहीं ढूंढ पाएगा और रनटाइम त्रुटि देगा।