टी एल; डॉ
जावा में, इसका कारण public static void main(String[] args)
यह है
- गोसलिंग चाहते थे
- C में अनुभव किए गए किसी व्यक्ति द्वारा लिखा गया कोड (जावा में नहीं)
- किसी के द्वारा क्रियान्वित किया जाना NeWS पर पोस्टस्क्रिप्ट चलाने के लिए उपयोग किया जाता है
C # के लिए, रीज़निंग समान रूप से बोलने के लिए समान है। भाषा डिजाइनरों ने जावा से आने वाले प्रोग्रामरों के लिए प्रोग्राम एंट्री पॉइंट सिंटैक्स को परिचित रखा । जैसा कि C # आर्किटेक्ट एंडर्स हेजलसबर्ग इसे कहते हैं ,
... C # के साथ हमारा दृष्टिकोण बस एक वैकल्पिक ... जावा प्रोग्रामर की पेशकश करने का रहा है ...
दीर्घ संस्करण
ऊपर का विस्तार और उबाऊ संदर्भ के साथ समर्थित है।
जावा टर्मिनेटर हस्ता ला विस्टा बेबी!
वीएम स्पेस, 2.17.1 वर्चुअल मशीन स्टार्ट-अप
... जावा वर्चुअल मशीन के लिए प्रारंभिक कक्षा को निर्दिष्ट करने का तरीका इस विनिर्देश के दायरे से परे है, लेकिन यह विशिष्ट है, मेजबान वातावरण में जो कमांड लाइन का उपयोग करते हैं, वर्ग के पूरी तरह से योग्य नाम के रूप में निर्दिष्ट करने के लिए एक कमांड-लाइन तर्क और उसके बाद के कमांड-लाइन तर्कों को मुख्य के तर्क के रूप में प्रदान किए जाने वाले तार के रूप में उपयोग करने के लिए। उदाहरण के लिए, सूर्य के जावा 2 एसडीके का उपयोग सोलारिस, कमांड लाइन के लिए
java Terminator Hasta la vista Baby!
कक्षा के मुख्य विधि Terminator
(अनाम पैकेज में एक वर्ग) को लागू करके और इसे चार स्ट्रिंग्स "हस्ता", "ला", "विस्टा" और "बेबी!" से जोड़कर एक जावा वर्चुअल मशीन शुरू करेगा ।
... यह भी देखें: परिशिष्ट: मुझे आपके कपड़े, आपके जूते और आपकी मोटरसाइकिल चाहिए
- मेरी व्याख्या:
कमांड लाइन इंटरफ़ेस में विशिष्ट स्क्रिप्ट की तरह उपयोग के लिए लक्षित निष्पादन।
महत्वपूर्ण कदम
... जो हमारी जाँच में झूठे निशान से बचने में मदद करता है।
वीएम स्पेस, 1.2 जावा वर्चुअल मशीन
जावा वर्चुअल मशीन जावा प्रोग्रामिंग भाषा के कुछ भी नहीं जानती है ...
पूर्व अध्याय का अध्ययन करते समय मैंने ऊपर देखा - 1.1 इतिहास जो मुझे लगा कि सहायक हो सकता है (लेकिन बेकार हो गया)।
- मेरी व्याख्या:
निष्पादन केवल वीएम युक्ति द्वारा शासित होता है, जो
स्पष्ट रूप से घोषित करता है कि इसका जावा भाषा से कोई लेना-देना नहीं है
=> JLS और कुछ भी जावा भाषा से संबंधित सभी को अनदेखा करने के लिए ठीक है
गोसलिंग: C और स्क्रिप्टिंग भाषा के बीच एक समझौता ...
ऊपर के आधार पर, मैंने JVM इतिहास के लिए वेब खोजना शुरू किया । परिणामों में बहुत अधिक कचरा, मदद नहीं की।
फिर, मैंने गोस्लिंग के बारे में किंवदंतियों को याद किया और गोस्लिंग JVM के इतिहास में अपनी खोज को सीमित कर दिया ।
यूरेका! जेवीएम स्पेक कैसे बने
जेवीएम लैंग्वेज समिट 2008 के इस मुख्य अंश में, जेम्स गोसलिंग ने चर्चा की ... जावा का निर्माण, ... सी और स्क्रिप्टिंग भाषा के बीच एक समझौता ...
- मेरी व्याख्या:
स्पष्ट घोषणा कि निर्माण के समय,
सी और स्क्रिप्टिंग को सबसे महत्वपूर्ण प्रभाव माना गया है।
पहले से ही वीएम युक्ति 2.17.1 में पटकथा को मंजूरी देखा,
आदेश पंक्ति तर्क पर्याप्त समझाने String[] args
लेकिन static
और main
आगे खुदाई करने के लिए की जरूरत है अभी तक वहाँ नहीं कर रहे हैं, ...
इसे टाइप करते समय ध्यान दें - C, स्क्रिप्टिंग और VM Spec 1.2 को इसके कुछ भी नहीं - जावा से जोड़ते हुए - मुझे ऐसा लगता है कि कुछ परिचित, कुछ ... ऑब्जेक्ट ओरिएंटेड धीरे-धीरे गुजर रहा है। मेरा हाथ थाम लो और मूव रख लो 'अब हम लगभग वहाँ हैं
मुख्य स्लाइड ऑनलाइन उपलब्ध हैं: 20_Gosling_keynote.pdf , मुख्य बिंदुओं की प्रतिलिपि बनाने के लिए काफी सुविधाजनक।
पेज 3
जावा का प्रागितिहास
* मेरी सोच को क्या आकार दिया
पेज 9
समाचार
* नेटवर्क एक्स्टेंसिबल विंडो सिस्टम
* स्क्रिप्टिंग पर आधारित एक विंडो सिस्टम ...।
परिशिष्ट भाग (!!)
पेज 16
एक बड़ा (लेकिन शांत) लक्ष्य:
मैं कितना करीब आ सकता था
"स्क्रिप्टिंग" महसूस ...
पेज 19
मूल अवधारणा
* इमारत के बारे में सब था
चीजों के नेटवर्क,
एक पटकथा द्वारा आर्केस्ट्रा
भाषा: हिन्दी
* (यूनिक्स गोले, AppleScript, ...)
पेज 20
भेड़ियों के कपड़ों में एक भेड़िया
* डेवलपर्स बनाने के लिए सी सिंटैक्स
आरामदायक
ए-हा! आइए C सिंटैक्स पर करीब से देखें ।
"हैलो, दुनिया" उदाहरण ...
main()
{
printf("hello, world\n");
}
... मुख्य नाम के एक फ़ंक्शन को परिभाषित किया जा रहा है। मुख्य समारोह सी कार्यक्रमों में एक विशेष उद्देश्य कार्य करता है; रन-टाइम वातावरण प्रोग्राम निष्पादन शुरू करने के लिए मुख्य फ़ंक्शन को कॉल करता है।
... मुख्य फ़ंक्शन में वास्तव में दो तर्क हैं, int argc
और char *argv[]
क्रमशः, जो कमांड लाइन तर्क को संभालने के लिए उपयोग किया जा सकता है ...
क्या हम करीब आ रहे हैं? बिलकुल। यह भी उपरोक्त उद्धरण से "मुख्य" लिंक का अनुसरण करने लायक है:
मुख्य कार्य वह है जहां एक कार्यक्रम निष्पादन शुरू होता है। यह प्रोग्राम की कार्यक्षमता के उच्च-स्तरीय संगठन के लिए ज़िम्मेदार है, और आम तौर पर इसे निष्पादित किए जाने पर प्रोग्राम को दिए गए कमांड तर्कों तक पहुंच होती है।
- मेरी व्याख्या:
सी डेवलपर के लिए सहज होने के लिए, कार्यक्रम प्रविष्टि बिंदु होना चाहिए main
।
इसके अलावा, चूंकि जावा को कक्षा में होने के लिए किसी भी विधि की आवश्यकता होती है, Class.main
यह
उतना ही करीब है जितना कि यह हो जाता है: स्थिर मंगलाचरण, बस वर्ग नाम और डॉट,
कोई भी निर्माता कृपया नहीं - सी ऐसा कुछ नहीं जानता है।
यह भी संक्रामक सी # पर लागू होता है, को ध्यान में रखते
जावा से यह करने के लिए आसान प्रवास के विचार।
पाठकों को लगता है कि परिचित प्रोग्राम एंट्री पॉइंट से कोई फर्क नहीं पड़ता है, कृपया स्टैक ओवरफ्लो प्रश्नों को खोजने और जांचने के लिए आमंत्रित किया जाता है, जहां जावा एसई से आने वाले लोग जावा एमई एमआईडीपी के लिए हैलो वर्ल्ड लिखने की कोशिश कर रहे हैं । नोट MIDP प्रविष्टि बिंदु के पास न तो है main
और न ही static
।
निष्कर्ष
उपरोक्त के आधार पर मैं कहूंगा कि static
, main
और String[] args
जावा और C # के क्षणों में कार्यक्रम प्रविष्टि बिंदु को परिभाषित करने के लिए सबसे उचित विकल्प थे ।
परिशिष्ट: मुझे आपके कपड़े, आपके जूते और आपकी मोटरसाइकिल चाहिए
स्वीकार करना है, VM Spec 2.17.1 पढ़ना बहुत मजेदार था।
... कमांड लाइन
java Terminator Hasta la vista Baby!
कक्षा के मुख्य विधि Terminator
(अनाम पैकेज में एक वर्ग) को लागू करके और इसे चार स्ट्रिंग्स "हस्ता", "ला", "विस्टा" और "बेबी!" से जोड़कर एक जावा वर्चुअल मशीन शुरू करेगा ।
अब हम उन चरणों की रूपरेखा तैयार करते हैं, जिन्हें वर्चुअल मशीन Terminator
लोडिंग, लिंकिंग और इनिशियलाइज़ेशन प्रक्रियाओं के उदाहरण के रूप में निष्पादित कर सकती है , जिन्हें बाद के खंडों में आगे वर्णित किया गया है।
प्रारंभिक प्रयास ... पता चलता है कि वर्ग Terminator
लोड नहीं है ...
Terminator
लोड होने के बाद , इसे मुख्य किए जाने से पहले आरंभीकृत किया जाना चाहिए, और एक प्रकार (वर्ग या इंटरफ़ेस) को प्रारंभिक होने से पहले हमेशा लिंक किया जाना चाहिए। लिंकिंग (preparation2.17.3) में सत्यापन, तैयारी और (वैकल्पिक रूप से) रिज़ॉल्यूशन शामिल है ...
सत्यापन (loaded2.17.3) यह जाँचता है कि भरी हुई प्रतिनिधित्व Terminator
अच्छी तरह से बनाई गई है ...
संकल्प (checking2.17.3) वर्ग से प्रतीकात्मक संदर्भों की जाँच की प्रक्रिया है Terminator
...
Terminator
ओह, हाँ
से प्रतीकात्मक संदर्भ ।