2009-11-04 17 views
15

मैं समझता हूं कि स्ट्रिंग [] तर्क पैरामीटर के रूप में मुख्य रूप से पारित तारों की एक सरणी है।जावा में स्ट्रिंग [] तर्क क्यों आवश्यक है?

java Print "Hello, World!" 

 

class Print { 
    public static void main(String[] args) { 
    System.out.println(args[0]); 
    } 
} 

हालांकि, जब आप एक पैरामीटर (भले ही आप का उपयोग नहीं करते) के रूप में यह शामिल नहीं है, यह एक अपवाद फेंकता है। तो इसकी आवश्यकता क्यों है? इसके अलावा, यह एक int [] या बूलियन [] क्यों नहीं हो सकता है?

उत्तर

31

यह एक स्ट्रिंग है क्योंकि कमांड लाइन टेक्स्ट में व्यक्त की जाती है। यदि आप उस पाठ को पूर्णांक या बुलियन में परिवर्तित करना चाहते हैं, तो आपको यह स्वयं करना होगा - ऑपरेटिंग सिस्टम या जावा बूटस्ट्रैपर को वास्तव में कैसे पता चलेगा कि आप सबकुछ कैसे पार्स करना चाहते थे? मुझे लगता है कि जावा कमांड लाइन तर्क के समान पैरामीटर के साथ एक मुख्य विधि की तलाश कर सकता है, और फिर Integer.parseInt आदि का उपयोग करके उन्हें पार्स करने का प्रयास करें ... लेकिन यह बहुत जटिल होगा, और अभी भी कई स्थितियों में अपर्याप्त होगा।

क्योंकि यह अनिवार्य है - मूल रूप से जावा डिजाइनरों ने एक विधि हस्ताक्षर से चिपकने का फैसला किया, जो वैकल्पिक होने की अनुमति देने से स्पष्ट रूप से सरल है। हालांकि यह संभव हो जाएगा - सी # में, आप अंततः यह काफी फर्क नहीं पड़ता है

static void Main() 
static void Main(string[] args) 
static int Main() 
static int Main(string[] args) 

के किसी भी हो सकता है, ईमानदार होना। पैरामीटर को शामिल करने में कोई महत्वपूर्ण नकारात्मकता नहीं है।

+0

Oi, क्यों नाम बदलने: आप कारण मुझे यहाँ-http बता पता है? – paxdiablo

+0

+1 - इससे कोई फर्क नहीं पड़ता। साथ चलें, यहां कुछ भी नहीं हो रहा है :-) –

+0

@ पक्सडीब्लो: देवदेज़ में मेरी बात के कारण थोड़ा मजाक, यह सब कुछ है। कुछ दिनों या एक सप्ताह में वापस आ जाएगा। –

4

जावा रनटाइम सिस्टम विशेष रूप से एक String[] प्रकार पैरामीटर के साथ एक विधि के लिए दिखता है, क्योंकि यह पैरामीटर को आपके main विधि में पास करना चाहता है। यदि ऐसी कोई विधि मौजूद नहीं है, तो यह आपको अपवाद के माध्यम से सूचित करती है।

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

+0

क्यों फेंक होगा? //stackoverflow.com/questions/33454612/significance-of-string-args-while-writing-main – abhishah901

2

इस तरह भाषा को डिज़ाइन किया गया था। सी और सी ++ दोनों एक समान फैशन में करते हैं, हालांकि एक अलग गिनती के साथ, जावा के लिए स्ट्रिंग सरणी में शामिल जानकारी।

आप ने इसे पूर्णांक या बूलियन लेने के लिए डिज़ाइन किया है, लेकिन संभावित रूप से कम लाभ के लिए जावा रनटाइम में और अधिक काम जोड़ा होगा।

स्ट्रिंग का उपयोग किसी भी प्रकार की जानकारी को मुख्य कार्यक्रम (पूर्णांक और बूलियन समेत) में प्रेषित करने के लिए किया जा सकता है। यदि आप एक स्ट्रिंग में पास करना चाहते हैं तो पूर्णांक के लिए ऐसा नहीं है (उपयोगकर्ता को मैन्युअल रूप से इसे यूटीएफ -8 या कुछ के रूप में एन्कोड करना है, ऐसा कुछ नहीं जो लोगों को भाषा में सहन करेगा)।

बस इसे घोषित करना याद रखें। हर तरह से, यदि आप चाहें तो भाषा पर एक परिवर्तन अनुरोध बढ़ाएं (इसे वैकल्पिक बनाने के लिए, या अन्य हस्ताक्षरों की अनुमति दें) लेकिन मुझे संदेह है कि बहुत दूर नहीं मिलेगा।

-1

क्योंकि आपके main() फ़ंक्शन चलाने वाला कोड उस हस्ताक्षर के लिए बहुत विशेष रूप से देख रहा है। होने, कहीं के रूप में समझें:

YourClass.main(new String[] { ... }); 

जाहिर है, मुख्य कुछ और ले जाता है, तो यह असफल हो जायेगी।

0

यह एक सम्मेलन है।विधि कमांड लाइन दुभाषिया द्वारा उपयोग की जाती है और इस तरह यह इसकी अपेक्षा करता है। इसके अलावा - संकलक इस विशेष रूप में हस्ताक्षर की अपेक्षा करता है और यदि आप पैरामीटर को छोड़ देते हैं तो संकलित नहीं करेंगे, उदाहरण के लिए

+0

क्यों? आप कारण पता है मुझे बताओ यहाँ http://stackoverflow.com/questions/33454612/significance-of-string-args-while-writing-main – abhishah901

+0

दुभाषिया * हस्ताक्षर की उम्मीद है। कोई कंपाइलर नहीं – abhishah901

0

स्ट्रिंग [] पैरामीटर का उपयोग पहले श्रेणी के नाम के साथ कमांड लाइन तर्कों को सहेजने के लिए किया जाता है। इसके अलावा, अगर आप स्ट्रिंग के बिना अपने मुख्य विधि कॉल [] यह बस एक अधिभार हो जाएगा और JVM बुला नहीं किया जाएगा कि अगर method.And आप को छोड़ इस हस्ताक्षर मुख्य विधि JVM एक अपवाद

+0

पहला कमांड लाइन तर्क जावा में वर्ग का नाम नहीं है। अगर हम किसी भी कमांड लाइन तर्क को पार नहीं कर रहे हैं, यानी जावा जावा क्लासनाम कह रहे हैं, तो यह वर्ग नाम को स्ट्रिंग सरणी में नहीं रखेगा। सी/सी ++ में निष्पादन योग्य फ़ाइल नाम पहला तर्क है। – Vivek

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