2011-09-06 38 views
5

Chúng tôi có thể cung cấp thông số args[] cho phương thức main() hoặc chọn không. Nhưng nếu chúng ta gọi bất kỳ phương thức tham số nào khác mà không truyền đủ đối số, nó sẽ cho chúng ta một lỗi.Tại sao chúng ta không gặp lỗi khi chúng ta không vượt qua bất kỳ đối số dòng lệnh nào?

Tại sao lại không phải như vậy với phương pháp main(String[] args)?

+0

Bạn có thể rõ ràng hơn không, bạn đang thực thi ứng dụng có và không có thông số như thế nào? – medopal

+3

Câu trả lời liên quan, bạn có thể làm giống như thế này 'public void myMethod (String ... array)' theo cách này bạn có thể vượt qua số đối số này ngay cả 0, và nó sẽ không đưa ra lỗi. – medopal

Trả lời

1

Main là đặc biệt và tự động trống rỗng String array khi không có gì được cung cấp. Như mô tả chính xác việc gọi main() mà không có đối số. Hệ thống cung cấp điều này như một sự tiện lợi.

+0

Sai. 'null' không liên quan gì đến nó. – aioobe

1

Java gọi chính phương thức chính với các đối số, do đó, không có lỗi trên nó mặc dù chúng tôi "gọi" không có đối số.

4

Một mảng Chuỗi luôn được chuyển, ngay cả khi không có tham số dòng lệnh nào. Trong tình huống đó độ dài của mảng là 0, mà bạn có thể kiểm tra cho chính mình qua

public static void main(String[] args) { 
    if (args.length == 0) { 
     System.out.println("no parameters were passed"); 
    } 
} 
10
public static void main(String[] args) 

main luôn nhận được thông số của nó, mà là một mảng của String. Nếu bạn không vượt qua bất kỳ đối số dòng lệnh nào, thì args sẽ trống nhưng vẫn ở đó.

2

Như bạn thấy, chính loại trừ một đối số hàm - đó là một chuỗi các chuỗi. JVM đảm nhiệm truyền bất kỳ đối số dòng lệnh nào dưới dạng một chuỗi các chuỗi tới hàm chính. Nếu không có đối số nào được đưa ra, một mảng trống sẽ được truyền - nhưng nó vẫn ở đó.

Bạn có thể cũng đã chức năng riêng của bạn được định nghĩa như thế này:

void myMain(String args[]) { 
    for(int i = 0; i < args.length; i++) { 
     System.out.println(args[i]); 
    } 
} 

Sau đó bạn có thể gọi chức năng này, bắt chước đi qua ba đối số dòng lệnh:

String a[] = {"foo", "bar", "bah"}; 
myMain(a); 

Hoặc bạn có thể bắt chước tình không có đối số dòng lệnh nào được cung cấp:

String a[] = {}; 
myMain(a); 

Bạn cũng có thể vượt qua args từ chính thực để chức năng của bạn và nó sẽ làm việc bất kể nếu bất kỳ thông số được đưa ra hay không:

public static void main(String[] args) { 
    myMain(args); 
} 

Lưu ý rằng không có kiểm tra con trỏ null trong myMain vì vậy nếu bạn vượt qua nó một null nó sẽ ném NPE.

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