"स्ट्रिंग आर्ग्स []" क्या है? मुख्य विधि जावा में पैरामीटर


315

मैं अभी जावा में प्रोग्राम लिखने लगा हूँ। निम्नलिखित जावा कोड का क्या अर्थ है?

public static void main(String[] args)
  • क्या है String[] args?

  • आप इनका उपयोग कब करेंगे args?

स्रोत कोड और / या उदाहरण सार स्पष्टीकरण पर पसंद किए जाते हैं

जवाबों:


302

जावा argsमें वस्तुओं के एक सरणी के रूप में आपूर्ति की गई कमांड-लाइन तर्क शामिलString हैं।

दूसरे शब्दों में, यदि आप के रूप में अपने कार्यक्रम चलाने java MyProgram one twoतो argsशामिल होंगे ["one", "two"]

यदि आप की सामग्री का उत्पादन करना चाहते हैं args, तो आप इस तरह से उनके माध्यम से लूप कर सकते हैं ...

public class ArgumentExample {
    public static void main(String[] args) {
        for(int i = 0; i < args.length; i++) {
            System.out.println(args[i]);
        }
    }
}

51
ध्यान देने योग्य बात यह है कि argsजरूरी नहीं कि इसका नाम हो args(आप इसे जो चाहें नाम दे सकते हैं) - हालांकि यह सम्मेलन का पालन करना सबसे अच्छा है। आप String... argsसमय-समय पर देख सकते हैं, जो समकक्ष है।
20'13

68
आर्ग्स इंडेक्सिंग 0. पर शुरू होता है (सी के विपरीत आपको कार्यक्रम का नाम दे रहा है)
एड्रिएनकिस्बे

1
@ डैनियल, क्या argsओएस की परवाह किए बिना अंतरिक्ष से अलग होने की गारंटी है?
पचेरियर

@Pacerier क्षमा करें मुझे बहुत देर हो चुकी है और मेरे पास कोई स्रोत नहीं है, लेकिन मुझे दृढ़ता से विश्वास है कि वे हैं। यह मुझे ऐसा प्रतीत होता है जैसे जावा (.exe) तर्कों को संभाल रहा है, न कि अंतर्निहित शेल / टर्मिनल को। लो -version, उदाहरण के लिए, यह java -versionऔर java.exe -versionनहीं, बल्कि java.exe /version(प्रयास मुख्य वर्ग लोड करने के लिए .version)। बस मेरे 2 सेंट अगर कोई कभी इस पर ठोकर खाता है।
ल्यूक

1
@ ल्यूक यह सच नहीं हो सकता है, कम से कम यूनिक्स सिस्टम पर नहीं। शेल पहले से ही शेल के नियमों के अनुसार विभाजित होने वाले कार्यक्रम के लिए तर्क देता है (तदनुसार उद्धृत / भागने के साथ)। कार्यक्रम के लिए कोई रास्ता नहीं है (इस मामले में जावा दुभाषिया) मूल अनप्लिट कमांड लाइन तक पहुंचने के लिए, और न ही ऐसा करने की इच्छा करना चाहिए क्योंकि यह उपयोगकर्ता को नरक से भ्रमित करेगा।
रेगर्नग

112

वे जावा में कमांड-लाइन तर्क के लिए हैं।

दूसरे शब्दों में, यदि आप चलाते हैं

जावा मायप्रोग्राम एक दो

फिर argsशामिल हैं:

[ "एक दो" ]

public static void main(String [] args) {
    String one = args[0]; //=="one"
    String two = args[1]; //=="two"
}

इसका कारण यह है कि आपके एप्लिकेशन को किसी विशेष तरीके से चलाने के लिए कॉन्फ़िगर करना है या इसे कुछ जानकारी प्रदान करना है।


यदि आप जावा में नए हैं, तो मैं आधिकारिक ओरेकल के जावा टीएम ट्यूटोरियल के माध्यम से पढ़ने की सलाह देता हूं ।


45

argsमंगलाचरण पर जावा प्रोग्राम में पारित कमांड-लाइन तर्क शामिल हैं। उदाहरण के लिए, अगर मैं इस तरह से कार्यक्रम शुरू करता हूं:

$ java MyProg -f file.txt

फिर argsएक सरणी होगी जिसमें तार होंगे "-f"और "file.txt"


जवाब के लिए धन्यवाद।
चाकलादेर असफाक आरिफ

मुझे अपना कोड पहले javac MyProg.javaचलाना था और चलाना था java MyProg -f file.txt। क्या इसका कोई कारण है, क्योंकि उत्तर में कहीं भी इसका उल्लेख नहीं है?
stanimirsp

19

निम्नलिखित उत्तर मेरी समझ और कुछ परीक्षण पर आधारित है।

स्ट्रिंग [] args क्या है?

Ans->

स्ट्रिंग [] -> जैसा कि हम जानते हैं कि यह एक सरल स्ट्रिंग सरणी है।

args -> यह एक सरणी का नाम है जो कुछ भी हो सकता है (जैसे a, ar, तर्क, परम, पैरामीटर) संकलक के साथ कोई समस्या नहीं है और निष्पादित और मैंने भी परीक्षण किया है।

उदाहरण
1) सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] तर्क)

2) सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] पैरामीटर)

आप इन आर्ग्स का उपयोग कब करेंगे?

उत्तर->

मुख्य फ़ंक्शन डेवलपर्स द्वारा बहुत समझदारी से डिज़ाइन किया गया है। वास्तविक सोच बहुत गहरी है। जिसे मूल रूप से कमांड लाइन तर्क के आधार पर C & C ++ के तहत विकसित किया गया है, लेकिन आजकल कोई भी इसका अधिक उपयोग नहीं करता है।

थिंग 1- उपयोगकर्ता कमांड लाइन से किसी भी प्रकार का डेटा दर्ज कर सकता है और यह संकलक द्वारा स्वीकार करने के लिए नंबर या स्ट्रिंग हो सकता है या आवश्यक हो सकता है जिसे हमें उपयोग करना चाहिए? बात २ देखें

थिंग 2- स्ट्रींग वह डायटाइप है जो जावा में सभी आदिम डेटाैटिप्स जैसे कि इंट, लॉन्ग, फ्लोट, डबल, बाइट, शॉट, चार का समर्थन करता है। आप इसे आसानी से किसी भी आदिम डेटाटाइप में पार्स कर सकते हैं।

उदाहरण के लिए निम्नलिखित कार्यक्रम संकलित और निष्पादित किया गया है और मैंने भी परीक्षण किया है।

यदि इनपुट है -> 1 1

// one class needs to have a main() method
public class HelloWorld
{
  // arguments are passed using the text field below this editor
  public static void main(String[] parameter)
  {    
System.out.println(parameter[0] + parameter[1]); // Output is 11

//Comment out below code in case of String
    System.out.println(Integer.parseInt(parameter[0]) + Integer.parseInt(parameter[1])); //Output is 2
    System.out.println(Float.parseFloat(parameter[0]) + Float.parseFloat(parameter[1])); //Output is 2.0    
    System.out.println(Long.parseLong(parameter[0]) + Long.parseLong(parameter[1])); //Output is 2    
    System.out.println(Double.parseDouble(parameter[0]) + Double.parseDouble(parameter[1])); //Output is 2.0    

  }
}

13

यहां तक ​​कि ओपी ओपी के बारे में भी बात कर रहा String[] argsहूं, मैं इसका पूरा उदाहरण देना चाहता हूं public static void main(String[] args)

Public: एक एक्सेस मोडिफायर है , जो परिभाषित करता है कि कौन इस तरीके तक पहुंच सकता है। सार्वजनिक का अर्थ है कि यह विधि किसी भी वर्ग द्वारा सुलभ होगी (यदि अन्य वर्ग इस कक्षा तक पहुँचने में सक्षम हैं।)।

Static: एक कीवर्ड है जो वर्ग से संबंधित चीज़ की पहचान करता है। इसका अर्थ यह है कि दी गई विधि या चर संबंधित नहीं बल्कि कक्षा से संबंधित है। यह एक कक्षा का उदाहरण बनाए बिना पहुँचा जा सकता है।

Void: विधि के रिटर्न प्रकार को परिभाषित करने के लिए उपयोग किया जाता है। यह परिभाषित करता है कि क्या विधि वापस आ सकती है। शून्य का अर्थ है विधि किसी भी मूल्य को वापस नहीं करेगी।

main: विधि का नाम है। यह विधि नाम JVM द्वारा केवल एक विशेष हस्ताक्षर के साथ एक आवेदन के लिए एक प्रारंभिक बिंदु के रूप में खोजा जाता है।

String[] args : मुख्य विधि का पैरामीटर है।

यदि आप JDK स्रोत कोड (jdk-src \ j2se \ src \ share \ bin \ j2.c.c) को देखते हैं:

/* Get the application's main method */
mainID = (*env)->GetStaticMethodID(env, mainClass, "main",
                   "([Ljava/lang/String;)V");
...
{    /* Make sure the main method is public */
...
mods = (*env)->CallIntMethod(env, obj, mid);
if ((mods & 1) == 0) { /* if (!Modifier.isPublic(mods)) ... */
    message = "Main method not public.";
    messageDest = JNI_TRUE;
    goto leave;
...

आप देख सकते हैं कि प्रारंभिक विधि जावा में का नाम mainहोना चाहिए और विशिष्ट हस्ताक्षर होना चाहिएpublic static void main(String[] args)

कोड हमें यह भी बताता है कि public static void main(String[] args)निश्चित नहीं है, यदि आप कोड (jdk-src \ j2se \ src \ share \ bin \ java.c) को किसी अन्य हस्ताक्षर में बदलते हैं, तो यह काम करेगा लेकिन इसे बदलने से आपको अन्य संभावित समस्याएं मिलेंगी जावा की वजह से चश्मा

ऑफटॉपिक: ओपी से यह सवाल पूछे जाने में 7 साल हो गए हैं, मेरा अनुमान है कि ओपी अब तक खुद के सवाल का जवाब दे सकता है।


12

String [] args यह भी है कि आप जावा में स्ट्रिंग्स की एक सरणी कैसे घोषित करते हैं।

इस पद्धति के हस्ताक्षर में, सरणी argsको मूल्यों से भर दिया जाएगा जब विधि को बुलाया जाता है (जैसा कि यहां अन्य उदाहरण दिखाते हैं)। यद्यपि आप सीख रहे हैं, यह समझने लायक है कि यह argsसरणी ठीक उसी तरह है जैसे आपने खुद को एक विधि में बनाया है, जैसे कि:

public void foo() {
    String [] args = new String[2];
    args[0] = "hello";
    args[1] = "every";

    System.out.println("Output: " + args[0] + args[1]);

    // etc... the usage of 'args' here and in the main method is identical
}

12

मैं टूट जाता

public static void main(String args[])

भागों में।

"सार्वजनिक" का अर्थ है कि मुख्य () को कहीं से भी बुलाया जा सकता है।

"स्थिर" का अर्थ है कि मुख्य () एक विशिष्ट वस्तु से संबंधित नहीं है

"शून्य" अर्थ है कि मुख्य () का कोई मूल्य नहीं है

"मुख्य" एक फ़ंक्शन का नाम है। मुख्य () विशेष है क्योंकि यह कार्यक्रम की शुरुआत है।

"स्ट्रिंग []" का अर्थ स्ट्रिंग का एक सरणी है।

"आर्ग्स" स्ट्रिंग का नाम है [] (मुख्य के शरीर के भीतर) ()। "आर्ग्स" विशेष नहीं है; आप इसे कुछ और नाम दे सकते हैं और यह कार्यक्रम उसी तरह काम करेगा।

  • String[] argsस्ट्रिंग्स का एक संग्रह है, जिसे एक स्थान से अलग किया जाता है, जिसे टर्मिनल पर प्रोग्राम में टाइप किया जा सकता है। अधिक बार नहीं, शुरुआत करने वाला इस चर का उपयोग करने वाला नहीं है, लेकिन यह हमेशा ही होता है।

9

जब आप अपना कोड पूरा कर लेते हैं, तो आप इसे एक्सटेंशन के साथ एक फ़ाइल में बदल देंगे। जावा, जिसे डबल क्लिक करके चलाया जा सकता है, लेकिन कंसोल के दौरान (मैक पर टर्मिनल, विंडोज़ पर cmd.exe) जो उपयोगकर्ता को करने देता है बहुत सी बातें। एक बात यह है कि वे सांत्वना संदेश (System.out.print या System.out.println) देख सकते हैं, जिसे वे देख नहीं सकते कि क्या वे डबल क्लिक करते हैं। एक और चीज जो वे कर सकते हैं, वह निर्दिष्ट पैरामीटर है, इसलिए आमतौर पर आप लाइन का उपयोग करेंगे

java -jar MyCode.jar

के साथ कार्यक्रम के फ़ोल्डर में नेविगेट करने के बाद

cd C:My/Code/Location

खिड़कियों पर या

cd My/Code/Location

मैक पर (नोटिस कि मैक कम क्लंकी है) कोड चलाने के लिए, लेकिन उन मापदंडों को निर्दिष्ट करने के लिए जिनका आप उपयोग करेंगे

java -jar MyCode.jar parameter1 parameter2

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


9

सरल आम आदमी की भाषा में व्याख्या।

जब हम अपने जेवीएम को वर्ग के नाम पर निर्देशित करते हैं, तो मुख्य विधि हमें कुछ तर्क प्रदान करने की उम्मीद करती है। इसका मतलब है, मान लीजिए कि आपकी फ़ाइल का नाम Try.java है, अब इसे निष्पादित करने के लिए कमांड प्रॉम्प्ट में "javac Try.java" लिखने के लिए "java try" को निष्पादित करने के लिए संकलित करें। अब मान लें कि लिखने के बजाय केवल "जावा ट्राई" लिखिए आप "जावा ट्राई 1" लिखिए। यहां आपने एक तर्क "1" पास किया है। यह आपके मुख्य विधि द्वारा लिया जाएगा भले ही आप इसे अपने कोड में उपयोग न करें।

यदि आप यह जांचना चाहते हैं कि क्या आपकी मुख्य विधि ने वास्तव में "1" का तर्क लिया है या नहीं। बस, अपनी मुख्य विधि के अंदर निम्नलिखित टाइप करें:

for(int i = 0; i < args.length; i++) {
        System.out.println("Argument is: "+args[i]);
    }

7

मुझे लगता है कि यह ऊपर दिए गए उत्तरों से बहुत अच्छी तरह से कवर किया गया है, String args[]जब आप इसे चलाते हैं तो यह केवल एक तर्क है जिसे आप अपने आवेदन में पास कर सकते हैं। पूरा होने के लिए, मैं यह जोड़ सकता हूं कि यह विधि को दिए गए विधि पैरामीटर को परिभाषित करने के लिए मान्य है mainप्रकार के चर (चर) प्रकार के रूप में:

public static void main (String... args)

दूसरे शब्दों में, mainविधि को या तो स्ट्रिंग सरणी ( String args[]) या varargs ( String... args) को विधि तर्क के रूप में स्वीकार करना चाहिए । और नाम के साथ कोई जादू argsभी नहीं है। साथ ही आप लिख सकते हैं argumentsया यहां तक कि freddiefujiwaraके रूप में e.gs नीचे में दिखाया गया है .:

public static void main (String[] arguments)

public static void main (String[] freddiefujiwara)


6

जब एक जावा क्लास को कंसोल से निष्पादित किया जाता है, तो मुख्य विधि जिसे कहा जाता है। ऐसा होने के लिए, इस मुख्य विधि की परिभाषा होनी चाहिए

public static void main(String [])

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

java MyClass a b c

ये आमतौर पर आपके प्रोग्राम के विकल्पों को परिभाषित करने के लिए उपयोग किए जाते हैं, उदाहरण के लिए फ़ाइलों को लिखने या पढ़ने के लिए।


6

में public static void (String args []) आर्ग सांत्वना लाइन तर्क जिसका डेटा प्रकार स्ट्रिंग है की एक सरणी है। इस सरणी में, आप नीचे दिखाए गए अनुसार कमांड लाइन पर उन्हें आमंत्रित करके विभिन्न स्ट्रिंग तर्क संग्रहीत कर सकते हैं: जावा myProgram शान रॉयल और फिर शान को रॉयल में सरणी में संग्रहीत किया जाएगा [0] = "शान"; आर्ग [1] = "रॉयल"; आप इसे प्रोग्राम के अंदर मैन्युअल रूप से भी कर सकते हैं, जब आप उन्हें कमांड लाइन पर नहीं बुलाते हैं।


3

शैली dataType[] arrayRefVarको पसंद किया जाता है। यह शैली dataType arrayRefVar[]C / C ++ भाषा से आती है और इसे C / C ++ प्रोग्रामर को समायोजित करने के लिए जावा में अपनाया गया था।


1

String[] argsपैरामीटर पैरामीटर के रूप में पारित कर दिया तार की एक सरणी है जब आप ओएस में कमांड लाइन के माध्यम से अपने आवेदन चल रहे हैं है।

तो, कल्पना कीजिए कि आपने myApp.jarजावा एप्लिकेशन को संकलित और पैक किया है । आप अपने ऐप को OS में डबल क्लिक करके चला सकते हैं, बेशक, लेकिन आप इसे कमांड लाइन तरीके से भी चला सकते हैं, जैसे (लिनक्स में, उदाहरण के लिए):

user@computer:~$ java -jar myApp.jar

जब आप अपने आवेदन को कुछ मापदंडों को पास करते हैं, जैसे:

user@computer:~$ java -jar myApp.jar update notify

java -jarआदेश अपने स्ट्रिंग्स पारित करेंगे updateऔर notifyकरने के लिए अपनेpublic static void main() विधि।

फिर आप कुछ ऐसा कर सकते हैं:

System.out.println(args[0]); //Which will print 'update'
System.out.println(args[1]); //Which will print 'notify'

0

पिछली सभी टिप्पणियों के अलावा।

public static void main(String[] args) 

के रूप में लिखा जा सकता है

 public static void main(String...arg)

या

 public static void main(String...strings)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.