Apa itu "String args []"? parameter dalam metode utama Java

315

Saya baru mulai menulis program di Jawa. Apa arti kode Java berikut?

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

  • Kapan Anda akan menggunakan ini args?

Kode sumber dan / atau contoh lebih disukai daripada penjelasan abstrak

freddiefujiwara
sumber

Jawaban:

302

Di Jawa argsberisi argumen baris perintah yang disediakan sebagai arrayString objek.

Dengan kata lain, jika Anda menjalankan program Anda java MyProgram one twomaka argsakan mengandung ["one", "two"].

Jika Anda ingin menampilkan konten args, Anda dapat memutarnya seperti ini ...

public class ArgumentExample {
    public static void main(String[] args) {
        for(int i = 0; i < args.length; i++) {
            System.out.println(args[i]);
        }
    }
}
Dan Lew
sumber
51
Yang perlu diperhatikan adalah itu argstidak harus dinamai args(Anda dapat menamainya apa pun yang Anda inginkan) - meskipun yang terbaik adalah mengikuti konvensi. Anda juga mungkin melihat String... argsdari waktu ke waktu, yang setara.
vikingsteve
68
args pengindeksan mulai dari 0. (bertentangan dengan C memberi Anda nama program)
AdrieanKhisbe
1
@Aniel, Apakah argsdijamin akan dipisahkan oleh ruang terlepas dari OS?
Pacerier
@Pacerier, maaf saya sudah sangat terlambat dan saya tidak punya sumber, tapi saya sangat percaya mereka. Tampaknya bagi saya seolah-olah java (.exe) menangani argumen, bukan shell / terminal yang mendasarinya. Ambil -versioncontoh, ini java -versiondan java.exe -version, tetapi tidak java.exe /version(mencoba memuat kelas utama .version). Hanya 2 sen saya jika seseorang menemukan ini.
Luke
1
@ Lukas Itu tidak benar, setidaknya tidak pada sistem Unix. Di sana shell meneruskan argumen ke program yang sudah terpecah sesuai dengan aturan shell (dengan mengutip / melarikan diri dihapus sesuai). Tidak ada cara bagi program (penerjemah java dalam hal ini) untuk mengakses baris perintah tidak asli yang asli, juga tidak ingin melakukannya karena itu akan membingungkan para pengguna.
regnarg
112

Itu untuk argumen baris perintah di Jawa.

Dengan kata lain, jika Anda berlari

java MyProgram satu dua

Kemudian argsberisi:

[ "satu dua" ]

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

Alasan untuk ini adalah untuk mengkonfigurasi aplikasi Anda untuk menjalankan cara tertentu atau menyediakannya dengan sepotong informasi yang dibutuhkan.


Jika Anda baru mengenal Java, saya sangat merekomendasikan membaca Tutorial Java TM resmi Oracle .

mR_fr0g
sumber
45

argsberisi argumen baris perintah yang diteruskan ke program Java setelah doa. Misalnya, jika saya menjalankan program seperti ini:

$ java MyProg -f file.txt

Kemudian argsakan menjadi array yang berisi string "-f"dan "file.txt".

mipadi
sumber
Terima kasih atas jawabannya.
Chaklader Asfak Arefe
Saya harus mengkompilasi kode saya terlebih dahulu dengan javac MyProg.javadan daripada menjalankan java MyProg -f file.txt. Apakah ada alasan untuk ini, karena tidak ada jawaban yang disebutkan?
stanimirsp
@stanimirsp: Anda harus mengkompilasi kode sumber Java menjadi .classfile terlebih dahulu.
mipadi
19

Jawaban berikut ini berdasarkan pemahaman saya & beberapa tes.

Apa itu String [] args?

Ans->

String [] -> Seperti Kita tahu ini adalah array String sederhana.

args -> adalah nama dari array yang dapat berupa apa saja (misalnya a, ar, argumen, param, parameter) tidak ada masalah dengan compiler & dieksekusi & saya uji juga.

Mis.
1) public static static utama (String [] argumen)

2) public static static utama (parameter [] parameter)

Kapan Anda akan menggunakan args ini?

Ans->

Fungsi utama dirancang dengan sangat cerdas oleh pengembang. Pemikiran aktual sangat dalam. Yang pada dasarnya dikembangkan di bawah pertimbangan C & C ++ berdasarkan argumen baris perintah tetapi saat ini tidak ada yang lebih menggunakannya.

Hal 1- Pengguna dapat memasukkan jenis data apa pun dari baris perintah dapat berupa Angka atau String & diperlukan untuk menerimanya oleh kompiler tipe data mana yang harus kita gunakan? lihat benda 2

Thing 2- String adalah tipe data yang mendukung semua tipe data primitif seperti int, long, float, double, byte, shot, char di Java. Anda dapat dengan mudah menguraikannya dalam tipe data primitif apa pun.

Misalnya Program berikut ini dikompilasi & dieksekusi & saya juga diuji.

Jika input -> 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    

  }
}
Ajinkya
sumber
13

Bahkan OP hanya berbicara tentang String[] args, saya ingin memberikan contoh lengkap public static void main(String[] args).

Public: adalah Pengubah Akses , yang menentukan siapa yang dapat mengakses Metode ini. Publik berarti bahwa Metode ini akan dapat diakses oleh Kelas apa pun (Jika Kelas lain dapat mengakses Kelas ini.).

Static: adalah kata kunci yang mengidentifikasi hal terkait kelas. Ini berarti Metode atau variabel yang diberikan tidak terkait instance tetapi terkait Kelas. Itu dapat diakses tanpa membuat instance Kelas.

Void: digunakan untuk mendefinisikan Jenis Pengembalian Metode. Ini mendefinisikan apa metode dapat kembali. Void berarti Metode tidak akan mengembalikan nilai apa pun.

main: adalah nama Metode. Nama Metode ini dicari oleh JVM sebagai titik awal untuk aplikasi dengan tanda tangan tertentu saja.

String[] args : adalah parameter ke Metode utama.

Jika Anda melihat kode sumber JDK (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;
...

Anda dapat melihat bahwa metode awal di java harus dinamai maindan harus memiliki tanda tangan spesifikpublic static void main(String[] args)

Kode juga memberi tahu kita bahwa public static void main(String[] args)ini tidak diperbaiki, jika Anda mengubah kode di (jdk-src \ j2se \ src \ share \ bin \ java.c) ke tanda tangan lain, itu akan berfungsi tetapi mengubah ini akan memberi Anda kemungkinan masalah lain karena spesifikasi java

Offtopic: Sudah 7 tahun sejak OP mengajukan pertanyaan ini, tebakan saya adalah bahwa OP dapat menjawab pertanyaannya sendiri sekarang.

Igoranze
sumber
12

String [] args juga bagaimana Anda mendeklarasikan array dari Strings in Java.

Dalam tanda tangan metode ini, array argsakan diisi dengan nilai-nilai ketika metode dipanggil (seperti yang ditunjukkan contoh lain di sini). Karena Anda sedang belajar, perlu dipahami bahwa argsarray ini sama seperti jika Anda membuatnya sendiri dalam suatu metode, seperti dalam ini:

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
}
Cuga
sumber
12

Saya akan putus

public static void main(String args[])

di beberapa bagian.

"publik" berarti main () dapat dipanggil dari mana saja.

"statis" berarti main () bukan milik objek tertentu

"void" berarti main () tidak mengembalikan nilai

"main" adalah nama fungsi. main () spesial karena ini adalah awal dari program.

"String []" berarti array dari String.

"args" adalah nama dari String [] (di dalam tubuh main ()). "args" tidak istimewa; Anda bisa menyebutkannya dengan nama lain dan program akan bekerja sama.

  • String[] argsadalah kumpulan String, dipisahkan oleh spasi, yang dapat diketik ke dalam program di terminal. Lebih sering daripada tidak, pemula tidak akan menggunakan variabel ini, tetapi selalu ada untuk berjaga-jaga.
Jaimin Patel
sumber
9

Ketika Anda menyelesaikan kode Anda, Anda akan mengubahnya menjadi file dengan ekstensi .java, yang dapat dijalankan dengan mengklik dua kali, tetapi juga di seluruh konsol (terminal pada mac, cmd.exe di windows) yang memungkinkan pengguna melakukan banyak hal. Satu hal adalah mereka dapat melihat pesan konsol (System.out.print atau System.out.println) yang tidak dapat mereka lihat jika mereka mengklik dua kali. Hal lain yang dapat mereka lakukan adalah menentukan parameter, jadi biasanya Anda akan menggunakan baris

java -jar MyCode.jar

setelah menavigasi ke folder program dengan

cd C:My/Code/Location

di windows atau

cd My/Code/Location

pada Mac (perhatikan bahwa mac kurang kikuk) untuk menjalankan kode, tetapi untuk menentukan parameter yang akan Anda gunakan

java -jar MyCode.jar parameter1 parameter2

Parameter-parameter ini disimpan dalam array args, yang dapat Anda gunakan dalam program Anda adalah Anda ingin mengizinkan pengguna untuk mengontrol parameter khusus seperti file apa yang digunakan atau berapa banyak memori yang bisa dimiliki oleh program. Jika Anda ingin tahu cara menggunakan array, Anda mungkin bisa menemukan topik di situs ini atau hanya mencari di google saja. Perhatikan bahwa sejumlah parameter dapat digunakan.

Zac
sumber
9

Penjelasan dalam bahasa awam yang sederhana.

Metode utama mengharapkan kita untuk memberikan beberapa argumen ketika kita mengarahkan JVM kita ke nama kelas. Itu berarti, misalkan nama file Anda adalah Try.java, sekarang untuk menjalankan ini di command prompt Anda menulis "javac Try.java" untuk dikompilasi diikuti oleh "java Try" untuk mengeksekusi. Sekarang anggaplah alih-alih menulis hanya "java Try" Anda menulis "java Try 1". Di sini Anda telah melewati argumen "1". Ini akan diambil dengan metode utama Anda, bahkan jika Anda tidak menggunakannya dalam kode Anda.

Jika Anda ingin memeriksa apakah metode utama Anda benar-benar mengambil argumen "1" atau tidak. Cukup, di dalam metode utama Anda ketikkan yang berikut ini:

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

Saya pikir itu cukup baik tercakup oleh jawaban di atas yang String args[]hanyalah sebuah array argumen string yang dapat Anda sampaikan ke aplikasi Anda ketika Anda menjalankannya. Untuk penyelesaian, saya dapat menambahkan bahwa itu juga valid untuk mendefinisikan parameter metode yang diteruskan ke mainmetode sebagai argumen variabel (varargs) dari tipe String:

public static void main (String... args)

Dengan kata lain, mainmetode harus menerima array String ( String args[]) atau varargs ( String... args) sebagai argumen metode. Dan tidak ada keajaiban dengan namanya argsjuga. Anda mungkin juga menulis argumentsatau bahkan freddiefujiwaraseperti yang ditunjukkan di bawah ini misalnya:

public static void main (String[] arguments)

public static void main (String[] freddiefujiwara)

sedeh
sumber
6

Ketika kelas java dieksekusi dari konsol, metode utama adalah apa yang disebut. Agar ini terjadi, definisi metode utama ini harus

public static void main(String [])

Fakta bahwa array string ini disebut args adalah konvensi standar, tetapi tidak sepenuhnya diperlukan. Anda akan mengisi array ini di baris perintah ketika Anda menjalankan program Anda

java MyClass a b c

Ini biasanya digunakan untuk menentukan opsi program Anda, misalnya file untuk menulis atau membaca.

shsteimer
sumber
6

di public static void main (String args []) args adalah array dari argumen line console yang tipe datanya adalah String. dalam array ini, Anda dapat menyimpan berbagai argumen string dengan memunculkannya di baris perintah seperti yang ditunjukkan di bawah ini: java myProgram Shaan Royal lalu Shaan dan Royal akan disimpan dalam array sebagai arg [0] = "Shaan"; arg [1] = "Kerajaan"; Anda dapat melakukan ini secara manual juga di dalam program, ketika Anda tidak memanggil mereka di baris perintah.

Shaan Royal
sumber
3

Gaya dataType[] arrayRefVarlebih disukai. Gaya ini dataType arrayRefVar[]berasal dari bahasa C / C ++ dan diadopsi di Jawa untuk mengakomodasi programmer C / C ++.

Gerald
sumber
1

The String[] argsparameter array String dilewatkan sebagai parameter ketika Anda menjalankan aplikasi Anda melalui baris perintah di OS.

Jadi, bayangkan Anda telah menyusun dan mengemas myApp.jaraplikasi Java. Anda dapat menjalankan aplikasi dengan mengklik dua kali di OS, tentu saja, tetapi Anda juga dapat menjalankannya menggunakan cara baris perintah, seperti (di Linux, misalnya):

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

Ketika Anda memanggil aplikasi Anda melewati beberapa parameter, seperti:

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

The java -jarperintah akan melewati Strings Anda updatedan notifyuntuk Andapublic static void main() metode.

Anda kemudian dapat melakukan sesuatu seperti:

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

Selain semua komentar sebelumnya.

public static void main(String[] args) 

dapat ditulis sebagai

 public static void main(String...arg)

atau

 public static void main(String...strings)
Rahul Anand
sumber