Đối số dòng lệnh được nhập vào chương trình trước hay JVM thực thi file class trước?

Theo như những gì mình đọc được trên mạng thì (String[] args) trong hàm main được khai báo ở java gọi là Command Line Agruments. , là những đối số được người chạy chương trình nhập vào khi chạy file class.
Nhưng trong trường hợp mình chạy chương trình như bên dưới này , thì “D:\test.txt” không phải là agrs[0] sao ạ ? , nếu đúng thì tại sao nó lại có lỗi ArrayIndexOutOfBoundsException ???
Còn nếu không đúng thì có thể giảng giúp mình trong một chương trình mình chạy bằng IDE chứ không phải là trên cmd, thì đối số dòng lệnh là phần nào trong source code ạ ?

Có vẻ bạn chưa hiểu rõ về cái args này. Bạn nói được nó là những đối số nhập vào khi chạy file class là đúng, nhưng bạn chưa hiểu nó là cái gì.

Để chạy file class ví dụ Test.class thì dùng cmd như sau.

java Test

Thì java sẽ thực thi file class đó, và không có args. Và nếu thêm 1 số đối số thêm vào câu lệnh trên, thành.

java Test arg1 arg2

Thì khi đó args sẽ mang hai giá trị chuỗi là arg1arg2.

7 Likes

Vâng. Mình hiểu ví dụ khi thực hiện trên cmd, nhưng khi một IDE chạy chương trình , ví dụ là chương trình trên của mình thì cái gì sẽ được lưu trong chuỗi args đấy ạ ?

Thường thì các IDE khi chạy thì nó sẽ không có truyền cmd args, nhưng nó có 1 số tùy chọn để thêm vào. Bạn thử search “add command line arguments in + IDE” để tìm hiểu thêm.

7 Likes

Sẽ không có gì được lưu vào trong chuỗi args đó, cho tới khi cậu truyền nó vào thông qua run configuration (tìm hiểu thêm tại đây nếu cậu dùng intellij).
Đó là lý do cậu bị ArrayIndexOutOfBoundsException .

6 Likes

Vậy có nghĩa là khi xài IDE thì chỉ có 1 cách truyền giá trị vào chuỗi args là thông qua run configuration thôi ạ ? Mình không thể truyền thông qua việc code source code phải không ạ ?

Nếu cậu dùng IDE, đó là cách truyền program argument.
Nếu cậu muốn truyền nó programmatically (tức là làm 1 cách tự động, thông qua 1 chương trình mồi nào đó. Chúng ta không nói “truyền thông qua việc code source code” :wink: ), cậu có thể sử dụng shell script/whatever script để làm việc đó, không phải dùng IDE.

Cơ mà tại sao cậu muốn truyền program argument programmatically trên IDE vậy?

5 Likes

À, số là mình đang thực tập ở 1 công ty, đây là chương trình người ta bảo mình tìm hiểu .
Ở đầu hàm main người ta kiểm tra args[0], rồi lấy giá trị của args[0] làm HOME_PATH trong suốt chương trình để đọc file.
Vì thế mình thắc mắc là vừa vào hàm main, chưa truyền gì hết mà sao đã kiểm tra null args[0] như hình bên dưới.

Sau khi bạn hướng dẫn thì mình đã biết và vào run configuration( trong Intellij) thì đúng là người ta đã set sẵn 1 địa chỉ dẫn tới file source ở phần “Program agruments”.
Cảm ơn bạn nhiều.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?