2011-11-17 15 views
9

मैं हाल ही में सोच रहा था कि java.lang.Runtime और java.lang.System दोनों लाइब्रेरी लोडिंग, कचरा संग्रहण और इसी तरह के संचालन के लिए समान तरीके क्यों हैं। क्या यह ऐतिहासिक कारणों से है, सुविधा के लिए, या वे वास्तव में भिन्न हैं? दोनों कक्षाएं जेडीके 1.0 से उपलब्ध हैं ...जावा - क्यों सिस्टम और रनटाइम कक्षाओं में समान तरीके हैं?

उत्तर

2

सिस्टम डेवलपर के लिए सिस्टम का उपयोग करने के लिए उपयुक्त हो सकता है कि विभिन्न चीजों का खुलासा करता है।

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

सिस्टम रनटाइम के लिए इंटरफ़ेस प्रदान करता है ताकि प्रोग्रामर द्वारा बुलाए जाने वाले रनटाइम विधियों तक पहुंच सक्षम हो सके। सिस्टम विधियों को कॉल करें और उन्हें उचित रूप से प्रतिनिधि दें।

+0

मुझे समझ में नहीं आता कि आप क्या व्यक्त करना चाहते हैं। यदि जावा नहीं चाहते हैं कि डेवलपर्स सीधे रनटाइम के साथ खेलें, तो इसे सार्वजनिक रूप से निजी बनाना चाहिए। हकीकत में, हम रनटाइम के तरीकों को स्वतंत्र रूप से कॉल कर सकते हैं। – Chao

+0

@ रिचर्ड द रनटाइम क्लास अंतर्निहित जेवीएम और ओएस पर्यावरण को उन तरीकों से उजागर करता है जो पोर्टेबल नहीं हो सकते हैं। सिस्टम क्लास JVM और OS के लगातार पोर्टेबल दृश्य का खुलासा करता है। सिस्टम सहित कई कक्षाओं के रूप में रनटाइम निजी नहीं हो सकता है, इसे कॉल करने की आवश्यकता है। ऐसे सीमित मामले भी हैं जहां विधियों को सीधे कॉल करना उचित हो सकता है। – BillThor

+0

आपका मतलब है कि यदि संभव हो तो हमें हमेशा सिस्टम क्लास का उपयोग करना पसंद करना चाहिए? शॉर्टकट विधियां कहीं भी एक अच्छा विचार हो सकती हैं, लेकिन इस तरह का एपीआई डिज़ाइन वास्तव में भ्रमित है। – Chao

0

यदि आप System#load(String) विधि पर उदाहरण देखते हैं, तो आप देखते हैं कि यह विधि Runtime#load(String) है। gc() के लिए वही। तो यह शायद ऐतिहासिक कारणों के लिए सबसे अधिक है।

+0

मैं ऐतिहासिक तर्क के लिए असहमत हूं। यदि आप जावा 1.0 एपीआई को देखते हैं, तो आप पाएंगे कि सिस्टम और रनटाइम में विधियां हमेशा मौजूद रही हैं। – Jonathan

4

मेरा अनुमान (याद रखें, इसका अनुमान है), यह है कि System कक्षा में विधियां सुविधा के लिए हैं। उदाहरण के लिए, System.gc(); स्थैतिक है, जहां Runtime.gc(); एक उदाहरण विधि है। यह कॉल को आसान बनाता है, क्योंकि आपको Runtime इंस्टेंस प्राप्त करने की आवश्यकता नहीं है।

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