“String args []” nedir? ana yöntemde parametre Java


315

Java'da program yazmaya yeni başladım. Aşağıdaki Java kodu ne anlama geliyor?

public static void main(String[] args)
  • Nedir String[] args?

  • Bunları ne zaman kullanırsın args?

Kaynaklar ve / veya örnekler özet açıklamalara göre tercih edilir

Yanıtlar:


302

Java'da args, sağlanan komut satırı bağımsız değişkenlerini bir dizi olarak içerirString nesne .

Başka bir deyişle, eğer programınızı çalıştırırsanız java MyProgram one twoo argszaman içerecektir ["one", "two"].

Eğer içeriğini çıkarmak argsistiyorsanız, sadece bu şekilde döngü yapabilirsiniz ...

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

51
Kayda değer bir şey, argsmutlaka adlandırılmak zorunda değildir args(istediğinizi adlandırabilirsiniz ) - konvansiyonu takip etmek en iyisidir. Ayrıca String... argszaman zaman eşdeğer görebilirsiniz.
2013

68
args indeksleme
0.'dan

1
@Daniel, argsİşletim sisteminden bağımsız olarak boşlukla ayrılması garanti ediliyor mu?
Pacerier

@Pacerier üzgünüm Çok geç kaldım ve bir kaynağım yok, ama inanıyorum ki. Bana java (.exe) argümanları ele alıyormuş gibi geliyor, temel kabuk / terminali değil. Al -versionörneğin, bu kadar java -versionve java.exe -versionancak java.exe /version(girişimleri ana sınıf yüklemek için .version). Birisi hiç tökezledi eğer sadece benim 2 sent.
Luke

1
@Luke Bu doğru olamaz, en azından Unix sistemlerinde değil. Kabuk zaten kabuk kurallarına göre ayrılmış programa argümanlar geçirir (alıntı / kaçış buna göre kaldırılır). Programın (bu durumda java yorumlayıcısı) orijinal bölünmemiş komut satırına erişmesinin bir yolu yoktur ve bunu yapmak istememelidir, çünkü kullanıcının cehennemini karıştıracaktır.
regnarg

112

Bunlar Java'daki komut satırı bağımsız değişkenleri içindir.

Başka bir deyişle, eğer

Java MyProgram bir iki

Sonra argsiçerir:

[ "bir iki" ]

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

Bunun nedeni, uygulamanızı belirli bir şekilde çalışacak şekilde yapılandırmak veya ihtiyaç duyduğu bazı bilgileri sağlamaktır.


Java'da yeniyseniz, resmi Oracle'ın Java TM Eğiticilerini okumanızı şiddetle tavsiye ederim .


45

args, çağırma üzerine Java programına iletilen komut satırı bağımsız değişkenlerini içerir. Örneğin, programı şöyle çağırırsam:

$ java MyProg -f file.txt

Sonra argsdizeleri "-f"ve içeren bir dizi olacaktır "file.txt".


Cevap için teşekkürler.
Chaklader Asfak Arefe

Önce kodumu javac MyProg.javaçalıştırmak ve daha sonra derlemek zorunda kaldı java MyProg -f file.txt. Bunun bir nedeni var, çünkü cevapların hiçbir yerinde bahsedilmiyor mu?
stanimirsp

@stanimirsp: Önce Java kaynak kodunu bir .classdosyada derlemeniz gerekir .
mipadi

19

Aşağıdaki cevap benim anlayış ve bazı test dayanmaktadır.

String [] args nedir?

Ans->

String [] -> Bildiğimiz gibi bunun basit bir String dizisi olduğunu.

args -> herhangi bir şey (örneğin, a, ar, argüman, param, parametre) olabilen bir dizinin adıdır.

Örnek
1) genel statik void main (String [] argümanı)

2) genel statik void main (String [] parametresi)

Bu argümanları ne zaman kullanırsınız?

Ans->

Ana işlev geliştiriciler tarafından çok akıllı bir şekilde tasarlanmıştır. Gerçek düşünme çok derindir. Temel olarak Komut satırı argümanına dayalı C & C ++ göz önünde bulundurularak geliştirildi, ancak bugünlerde kimse daha fazla kullanmıyor.

Şey 1- Kullanıcı komut satırından herhangi bir veri girebilir Sayı veya Dize olabilir ve derleyici tarafından hangi veri tipini kullanmamız gerektiğini kabul etmek gerekir? şeyi gör 2

Şey 2- String, Java'da int, long, float, double, bayt, shot, char gibi tüm ilkel veri tiplerini destekleyen veri tipidir. Herhangi bir ilkel veri tipinde kolayca ayrıştırabilirsiniz.

Örneğin , aşağıdaki program derlenmiş ve yürütülmüştür ve ben de test edilmiştir.

Giriş -> 1 1 ise

// 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

Hatta tho OP sadece hakkında konuşuyor String[] args, ben tam bir örnek vermek istiyorum public static void main(String[] args).

Public: bu Yönteme kimlerin erişebileceğini tanımlayan bir Erişim Değiştiricidir . Genel, bu Yönteme herhangi bir Sınıf tarafından erişilebileceği anlamına gelir (Başka Sınıflar bu Sınıfa erişebiliyorsa).

Static: sınıfla ilgili şeyi tanımlayan bir anahtar kelimedir. Bu, verilen Yöntem veya değişkenin örnekle ilgili değil, Sınıfla ilgili olduğu anlamına gelir. Bir Sınıf örneği oluşturmadan erişilebilir.

Void: Yöntemin Dönüş Türünü tanımlamak için kullanılır. Yöntemin neyi döndürebileceğini tanımlar. Void, Yöntemin herhangi bir değer döndürmeyeceği anlamına gelir.

main: Yöntemin adıdır. Bu Yöntem adı, JVM tarafından yalnızca belirli bir imzası olan bir uygulamanın başlangıç ​​noktası olarak aranır.

String[] args : ana Yöntemin parametresidir.

JDK kaynak koduna bakarsanız (jdk-src \ j2se \ src \ share \ bin \ java.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;
...

Bunu görebilirsiniz başlayan yöntem java adlandırılmalıdır mainve özel bir imza olması gerekirpublic static void main(String[] args)

Kod ayrıca public static void main(String[] args)düzeltilmediğini de söyler , (jdk-src \ j2se \ src \ share \ bin \ java.c) içindeki kodu başka bir imzayla değiştirirseniz, işe yarayacaktır, ancak bunu değiştirmek size başka olası sorunlar verecektir. Java özellikleri nedeniyle

Offtopic: OP bu soruyu sorduğundan bu yana 7 yıl geçti, tahminim OP'nin şu ana kadar kendi sorusunu cevaplayabileceğidir.


12

String [] args Java'da bir dizi Dizeyi nasıl bildireceğinizdir.

Bu yöntem imzasında, argsyöntem çağrıldığında dizi değerlerle doldurulur (buradaki diğer örneklerde gösterildiği gibi). Yine de öğrendiğiniz için, bu argsdizinin tıpkı bir yöntemde kendiniz bir tane oluşturduysanız olduğu gibi anlamaya değer :

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

Ayrılırdım

public static void main(String args[])

parçalar halinde.

"public" , main () öğesinin herhangi bir yerden çağrılabileceği anlamına gelir.

"statik" main () öğesinin belirli bir nesneye ait olmadığı anlamına gelir

"void" main () öğesinin değer döndürmediği anlamına gelir

"main" bir fonksiyonun adıdır. main () özel bir programdır çünkü programın başlangıcıdır.

"String []" bir String dizisi anlamına gelir.

"args" , String [] öğesinin adıdır (main () gövdesi içinde). "args" özel değildir; başka bir ad verebilir ve program aynı şekilde çalışır.

  • String[] argsterminaldeki programa yazılabilen bir boşlukla ayrılmış Dizeler koleksiyonudur. Yeni başlayanlar bu değişkeni daha fazla defa kullanmazlar, ancak her ihtimale karşı her zaman oradadır.

9

Kodunuzu bitirdiğinizde, dosyayı çift tıklatarak çalıştırılabilen .java uzantılı bir dosyaya dönüştüreceksiniz, aynı zamanda bir konsol boyunca (mac'ta terminal, pencerelerde cmd.exe) birçok şey. Bir şey, çift tıkladıklarında göremedikleri konsol mesajlarını (System.out.print veya System.out.println) görebilmeleridir. Yapabilecekleri başka bir şey parametreleri belirtmektir, bu nedenle normalde

java -jar MyCode.jar

ile programın klasörüne gittikten sonra

cd C:My/Code/Location

pencerelerde veya

cd My/Code/Location

Mac'te (mac'un daha az tıknaz olduğuna dikkat edin), ancak kullanacağınız parametreleri belirtmek için

java -jar MyCode.jar parameter1 parameter2

Programınızda kullanabileceğiniz args dizisinde saklanan bu parametreler, kullanıcının hangi dosyanın kullanılacağı veya programın ne kadar belleğe sahip olabileceği gibi özel parametreleri kontrol etmesine izin vermek istersiniz. Bir dizinin nasıl kullanılacağını bilmek istiyorsanız, muhtemelen bu sitede bir konu bulabilir veya sadece Google'da bulabilirsiniz. Herhangi bir sayıda parametrenin kullanılabileceğini unutmayın.


9

Basit layman'ın dilinde açıklama.

Ana yöntem, JVM'yi sınıf adına yönlendirdiğimizde bazı argümanlar sunmamızı bekliyor. Bu, dosya adınızın Try.java olduğunu varsayalım, şimdi komut isteminde bunu yürütmek için "javac Try.java" yazıp ardından "java Try" yazacaksınız. Şimdi "java Try" yazmak yerine "java Try 1" yazdığınızı varsayalım. Burada "1" argümanını geçtiniz. Bu, kodunuzda kullanmasanız bile ana yönteminiz tarafından alınacaktır.

Ana yönteminizin gerçekten "1" argümanını alıp almadığını kontrol etmek istiyorsanız. Basitçe, ana yönteminizin içine aşağıdakileri yazın:

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

7

Bence String args[]sadece çalıştırdığınızda uygulamanıza iletebileceğiniz bir dizi dize argümanı olan yukarıdaki cevaplarla kaplıdır . Tamamlama için, aynı zamanda, maindizeye değişken değişken (varargs) olarak yönteme iletilen method parametresini tanımlamanın geçerli olduğunu da ekleyebilirim :

public static void main (String... args)

Başka bir deyişle, mainyöntem bir yöntem bağımsız değişkeni olarak bir String dizisi ( String args[]) veya varargs ( String... args) kabul etmelidir . Ve adında sihir de yok args. Yazabilir argumentshatta freddiefujiwaraaşağıdaki e.gs'de gösterildiği gibi bile olabilir . :

public static void main (String[] arguments)

public static void main (String[] freddiefujiwara)


6

Bir java sınıfı konsoldan yürütüldüğünde, ana yöntem denir. Bunun gerçekleşmesi için bu ana yöntemin tanımı

public static void main(String [])

Bu dize dizisinin args olarak adlandırılması, standart bir kuraldır, ancak kesinlikle gerekli değildir. Programınızı çağırdığınızda bu diziyi komut satırına yerleştirirsiniz

java MyClass a b c

Bunlar genellikle programınızın seçeneklerini, örneğin yazılacak veya okunacak dosyalar tanımlamak için kullanılır.


6

içinde public void ana (String args []) bağımsız değişken veri türü String konsol hattı bağımsız değişken bir dizidir. bu dizide, çeşitli dize argümanlarını aşağıda gösterildiği gibi komut satırında çağırarak depolayabilirsiniz: java myProgram Shaan Royal sonra Shaan ve Royal dizide arg [0] = "Shaan" olarak depolanır; arg [1] = "The Royal"; bunları komut satırında çağırmazsanız, programın içinde de manuel olarak yapabilirsiniz.


3

Stil dataType[] arrayRefVartercih edilir. Stil dataType arrayRefVar[]C / C ++ dilinden gelir ve C / C ++ programcılarını barındırmak için Java'da benimsenmiştir.


1

String[] argsParametresi, OS komut satırı aracılığıyla uygulamayı çalıştırırken Strings bir dizi parametre olarak geçirilir.

Bu nedenle, bir myApp.jarJava uygulaması derlediğinizi ve paketlediğinizi düşünün . Uygulamanızı işletim sisteminde çift tıklatarak çalıştırabilirsiniz, ancak aynı zamanda komut satırını kullanarak da çalıştırabilirsiniz (örneğin Linux'ta):

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

Uygulamanızı aradığınızda, örneğin:

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

java -jarKomutu dizeler geçecek updateve notifylistenizepublic static void main() yöntemle.

Daha sonra şöyle bir şey yapabilirsiniz:

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

0

Önceki tüm yorumlara ek olarak.

public static void main(String[] args) 

olarak yazılabilir

 public static void main(String...arg)

veya

 public static void main(String...strings)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.