2009-05-31 13 views
11

यह ऐप्पल, सर्वलेट, मिडलेट इत्यादि के उप-वर्गों पर लागू होता हैएप्लेट को मुख्य() की आवश्यकता क्यों नहीं है?

उन्हें main() की आवश्यकता क्यों नहीं है? अगर मैं Craplet कक्षा बनाना चाहता हूं जो init() या कुछ समान होता है, तो क्या यह खराब डिज़ाइन है, या मैं इसे करने के बारे में कैसे जाऊं?

उत्तर

17

यह वास्तव में अच्छा डिज़ाइन है लेकिन स्पष्ट नहीं है और आप जो करना चाहते हैं उसका कोई प्रभाव नहीं पड़ेगा, इसलिए यह थोड़ा सा अंतर्ज्ञानी है।

इस प्रकार के अनुप्रयोग कंटेनरों में अपने जीवन जीते हैं और जैसे उनके प्रवेश बिंदु उन कंटेनरों द्वारा निर्धारित किए जाते हैं जिनके कंटेनरों का पालन करना चाहिए। इन मानकों के डिजाइनरों ने प्रवेश बिंदु मुख्य को कॉल न करने का फैसला किया। आप अपनी कार्यक्षमता को एक ओवरराइड विधि में रखेंगे।

public void init(); 
public void start(); 
public void stop(); 
public void destroy(); 

वे इन तरीकों है क्योंकि उनके सुपर क्लास, java.applet.Applet, इन तरीकों है: सभी एप्लेट निम्नलिखित चार विधियों की है। आप एक वर्ग का विस्तार या init() का नाम बदलने के लिए आप अपने वर्ग को लागू करने और अपने विधि कॉल init() होना चाहिए प्राप्त करने के लिए चाहते हैं

public void init() {} 

:

सुपर क्लास इन में कुछ भी लेकिन डमी कोड नहीं है। यह पॉलिमॉर्फिज्म का उपयोग करेगा ताकि आप जिस विधि को चाहें उसे कॉल कर सकें। जब तक आप सर्वलेट कंटेनर लिख रहे हों, तो आप अपना समय बर्बाद कर सकते हैं।

11

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

2

एक एप्लेट (आमतौर पर, आपका वेब ब्राउज़र) का निष्पादन वातावरण विभिन्न बिंदुओं पर एप्लेट विधियों को कॉल करता है, यह निर्भर करता है कि यह किस स्तर पर पहुंचने के चरण के आधार पर है। यह एक स्तर का अमूर्तता प्रदान करता है जो कि सरल main() विधि से वेब के लिए बेहतर अनुकूल है। इसके अलावा, main() विधियों के साथ मनमाने ढंग से जावा प्रोग्राम लॉन्च करना आमतौर पर सुरक्षा जोखिम का कुछ माना जाएगा।

3

'मुख्य' केवल एक सम्मेलन है कि सी, सी ++ और जावा आमतौर पर समर्थन करते हैं, लेकिन उदाहरण के लिए, यदि आप सीधे Win32 API के विरुद्ध सी या सी ++ लिखते हैं, तो आपके पास मुख्य() नहीं है, बल्कि इसके बजाय WinMain है।

+0

मेरे पास सिर्फ एक सम्मेलन के साथ गोमांस हैं लेकिन सच के लिए +1 ... जब मैं सबसे अच्छे विकल्प हैं तो मुझे इतना पागल हो जाता है ... उन्होंने तर्क के बिना इसे मुख्य क्यों नहीं दिया? – ojblass

+1

क्योंकि यह कमांड लाइन तर्क पास करने के लिए तंत्र है ... –

+0

कम से कम WinMain के पास प्रवेश बिंदु होने का कुछ संदर्भ था। लेकिन मुझे लगता है कि यह अलग है क्योंकि WinMain वास्तव में प्रभारी था और दास नहीं था। मुझे लगता है की आप सही हो। – ojblass

0

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

संबंधित मुद्दे