2009-05-21 30 views

Trả lời

35

args chứa các đối số dòng lệnh truyền cho các chương trình Java khi gọi. Ví dụ, nếu tôi gọi chương trình như vậy:

$ java MyProg -f file.txt 

Sau đó args sẽ là một mảng chứa các chuỗi "-f""file.txt".

232

Trong Java args chứa các đối tượng command-line arguments được cung cấp dưới dạng một mảng của String đối tượng.

Nói cách khác, nếu bạn chạy chương trình của mình dưới dạng java MyProgram one two thì args sẽ chứa ["one", "two"].

Nếu bạn muốn đầu ra các nội dung của args, bạn có thể chỉ vòng qua chúng như thế này ...

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

Worth chú ý là 'args' không nhất thiết phải có tên 'args' (bạn có thể đặt tên cho nó bất cứ điều gì bạn muốn) - mặc dù nó là tốt nhất để làm theo quy ước. Bạn cũng có thể thấy 'Chuỗi ... args' theo thời gian, tương đương. – vikingsteve

+49

lập chỉ mục arg bắt đầu bằng 0. (trái với C cho bạn biết tên chương trình) – AdrieanKhisbe

+1

@Daniel, 'args' có được bảo đảm tách biệt theo không gian bất kể hệ điều hành không? – Pacerier

12

String [] args cũng là cách bạn khai báo một mảng của Strings trong Java.

Trong chữ ký phương thức này, mảng args sẽ được lấp đầy với các giá trị khi phương thức được gọi (như các ví dụ khác ở đây hiển thị). Vì bạn đang học tập, mặc dù nó có giá trị hiểu rằng args mảng này cũng giống như nếu bạn đã tạo một mình trong một phương pháp, như trong này:

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 
} 
6

Khi một lớp java được thực hiện từ giao diện điều khiển, phương pháp chính là cái được gọi. Để điều này xảy ra, định nghĩa của phương pháp chính này phải là

public static void main(String []) 

Thực tế mảng chuỗi này được gọi là arg là một quy ước tiêu chuẩn, nhưng không bắt buộc. Bạn sẽ cư mảng này tại dòng lệnh Whne bạn gọi chương trình của bạn

java MyClass a b c 

Đây là những thường được sử dụng để xác định tùy chọn của chương trình của bạn, cho các tập tin ví dụ để viết hoặc đọc từ.

84

Đó là những đối số dòng lệnh trong Java.

Nói cách khác, nếu bạn chạy

java MyProgram một hai

Sau đó args chứa:

[ "một", "hai"]

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

Lý do cho việc này là định cấu hình ứng dụng của bạn để chạy một phần tử cách nhỏ hoặc cung cấp cho nó một số thông tin cần thiết.


Nếu bạn chưa quen với Java, tôi khuyên bạn nên đọc qua số JavaTM Tutorials chính thức của Oracle.

5

trong chính tĩnh void chính (String args []) args là một mảng đối số dòng bàn điều khiển có kiểu dữ liệu là Chuỗi. trong mảng này, bạn có thể lưu trữ các đối số chuỗi khác nhau bằng cách gọi chúng ở dòng lệnh như sau: java myProgram Shaan Royal sau đó Shaan và Royal sẽ được lưu trữ trong mảng là arg [0] = "Shaan" ; arg [1] = "Hoàng gia"; bạn cũng có thể thực hiện việc này theo cách thủ công trong chương trình, khi bạn không gọi chúng ở dòng lệnh.

7

Khi bạn hoàn thành mã của mình, bạn sẽ biến nó thành tệp có phần mở rộng .java, có thể chạy bằng cách nhấp đúp vào nó, nhưng cũng trong suốt bảng điều khiển (thiết bị đầu cuối trên mac, cmd.exe trên cửa sổ) cho phép người dùng làm nhiều việc. Có một điều là họ có thể thấy các tin nhắn giao diện điều khiển (System.out.print hoặc System.out.println) mà họ không thể nhìn thấy nếu họ nhấp đúp chuột vào. Một điều họ có thể làm là xác định các thông số, vì vậy thông thường bạn sẽ sử dụng dòng

java -jar MyCode.jar 

sau khi điều hướng đến thư mục của chương trình với

cd C:My/Code/Location 

trên cửa sổ hoặc

cd My/Code/Location 

trên Mac (thông báo rằng mac ít clunky) để chạy mã, nhưng để chỉ định các thông số bạn sẽ sử dụng

java -jar MyCode.jar parameter1 parameter2 

Các tham số này được lưu trữ trong mảng args, bạn có thể sử dụng trong chương trình của bạn là bạn muốn cho phép người dùng kiểm soát các tham số đặc biệt như sử dụng tệp nào hoặc bộ nhớ có bao nhiêu chương trình. Nếu bạn muốn biết làm thế nào để sử dụng một mảng, bạn có thể có thể tìm thấy một chủ đề trên trang web này hoặc chỉ cần google nó. Lưu ý rằng có thể sử dụng bất kỳ số tham số nào.

6

Tôi nghĩ rằng nó được bao gồm khá tốt bởi các câu trả lời ở trên rằng String args[] chỉ đơn giản là một mảng các đối số chuỗi bạn có thể chuyển đến ứng dụng của bạn khi bạn chạy nó.Hoàn thành, tôi có thể nói thêm rằng nó cũng có giá trị để xác định các tham số phương pháp truyền cho phương thức main như một đối số biến (varargs) của kiểu String:

public static void main (String... args)

Nói cách khác, phương pháp main phải chấp nhận một trong hai một mảng Chuỗi (String args[]) hoặc varargs (String... args) làm đối số phương thức. Và không có phép thuật với tên args. Bạn cũng có thể viết arguments hoặc thậm chí freddiefujiwara như trong e.gs dưới đây .:

public static void main (String[] arguments)

public static void main (String[] freddiefujiwara)

3

Phong cách dataType[] arrayRefVar được ưa thích. Phong cách dataType arrayRefVar[] xuất phát từ ngôn ngữ C/C++ và được chấp nhận trong Java để chứa các lập trình viên C/C++.

4

Giải thích bằng ngôn ngữ của giáo dân đơn giản.

Phương pháp chính mong đợi chúng tôi cung cấp một số đối số khi chúng tôi hướng JVM của chúng tôi đến tên lớp. Điều đó có nghĩa, giả sử tên tệp của bạn là Try.java, bây giờ để thực hiện điều này trong dấu nhắc lệnh bạn viết "javac Try.java" để biên dịch tiếp theo là "java Try" để thực hiện. Bây giờ giả sử thay vì viết đơn giản là "java Try" bạn viết "java Try 1". Ở đây bạn đã vượt qua một đối số "1". Điều này sẽ được thực hiện bởi phương pháp chính của bạn ngay cả khi bạn không sử dụng nó trong mã của bạn.

Nếu bạn muốn kiểm tra xem phương pháp chính của bạn có thực sự lấy đối số "1" hay không. Đơn giản, bên trong loại phương pháp chính của bạn như sau:

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

Thậm chí tho OP chỉ đang nói về String[] args, tôi muốn đưa ra một ví dụ hoàn chỉnh của public static void main(String[] args).

Public: là Access Modifier, xác định ai có thể truy cập Phương pháp này. Công cộng có nghĩa là Phương thức này sẽ được truy cập bởi bất kỳ Lớp học nào (Nếu các Lớp khác có thể truy cập vào Lớp này.).

Static: là từ khóa xác định thứ liên quan đến lớp học. Điều này có nghĩa là phương thức hoặc biến đã cho không liên quan đến cá thể nhưng có liên quan đến lớp. Nó có thể được truy cập mà không tạo ra thể hiện của một Class.

Void: được sử dụng để xác định Loại trả lại của Phương thức. Nó định nghĩa phương thức có thể trả về. Void có nghĩa là Method sẽ không trả về bất kỳ giá trị nào.

main: là tên của Phương thức. Tên Phương thức này được JVM tìm kiếm làm điểm bắt đầu cho một ứng dụng chỉ có chữ ký cụ thể.

String[] args: là tham số cho Phương thức chính.

Nếu bạn nhìn vào mã nguồn 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; 
... 

Bạn có thể thấy rằng starting method trong java phải được đặt tên main và phải có chữ ký cụ thể public static void main(String[] args)

Mã này cũng cho chúng ta biết rằng public static void main(String[] args) chưa được khắc phục, nếu bạn thay đổi mã trong (jdk-src \ J2SE \ src \ share \ bin \ java.c) để chữ ký khác, nó sẽ làm việc nhưng thay đổi này sẽ cung cấp cho bạn các vấn đề khác có thể vì java specs

Offtopic: đã 7 năm kể từ khi OP hỏi câu hỏi này, tôi đoán là OP có thể trả lời câu hỏi của anh ấy ngay bây giờ.

4

tôi sẽ chia tay

public static void main(String args[]) 

trong các bộ phận.

"công khai" có nghĩa là chính() có thể được gọi từ mọi nơi.

"tĩnh" có nghĩa là main() không thuộc về một đối tượng cụ thể

"khoảng trống" có nghĩa là main() trả về không có giá trị

"chính" là tên của hàm. main() là đặc biệt vì nó là khởi đầu của chương trình.

"Chuỗi []" có nghĩa là một mảng Chuỗi.

"args" là tên của chuỗi [] (trong phần nội dung chính()). "args" không phải là đặc biệt; bạn có thể đặt tên cho nó bất cứ điều gì khác và chương trình sẽ làm việc giống nhau.

  • String[] args là tập hợp các chuỗi, được phân tách bằng dấu cách, có thể nhập vào chương trình trên thiết bị đầu cuối. Nhiều lần hơn không, người mới bắt đầu sẽ không sử dụng biến này, nhưng nó luôn luôn có trong trường hợp.
11

Câu trả lời sau đây dựa trên hiểu biết của tôi & một số thử nghiệm.

Chuỗi [] args là gì?

Ans->

String [] -> Như Chúng tôi biết đây là một String mảng đơn giản.

args -> là tên của một mảng nó có thể là bất cứ điều gì (ví dụ một, ar, lập luận, param, tham số) không có vấn đề với trình biên dịch & thực hiện & tôi thử nghiệm là tốt.

Ví dụ:
1) public static void main (String [] lập luận)

2) public static void main String [] tham số()

Khi bạn sẽ sử dụng những args?

Ans->

Các chức năng chính được thiết kế rất thông minh bởi các nhà phát triển. Tư duy thực tế rất sâu sắc. Phát triển cơ bản dưới sự xem xét của C & C++ dựa trên đối số dòng lệnh nhưng ngày nay không ai sử dụng nó nhiều hơn.

Thing 1- Người dùng có thể nhập bất kỳ loại dữ liệu từ dòng lệnh có thể số hoặc chuỗi & cần thiết để chấp nhận nó bởi trình biên dịch mà datatype chúng ta nên có sử dụng không? xem điều 2

Thing 2- Chuỗi là kiểu dữ liệu hỗ trợ tất cả các kiểu dữ liệu nguyên thủy như int, long, float, double, byte, shot, char trong Java. Bạn có thể dễ dàng phân tích nó trong bất kỳ kiểu dữ liệu nguyên thủy nào.

Ví dụ: Chương trình sau được biên dịch & được thực hiện & Tôi cũng đã thử nghiệm.

Nếu đầu vào là -> 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  

    } 
} 
Các vấn đề liên quan