Trong một số trường hợp, một chương trình có thể được chạy theo những cách khác nhau và thể hiện hành vi khác nhau về cách nó được gọi. Nếu bạn gọi vim
như vi
, nó chạy trong một chế độ tương thích. Đôi khi, đó là cố gắng duy trì một phiên bản của một số chương trình liên quan - ví dụ mailq
và newaliases
trên nhiều hệ thống unix là một liên kết để sendmail
các chương trình này được đồng bộ hóa)
Các chương trình Java thường được gọi là:
% java -jar foo.jar lập luận
% java Foo lập luận
Phiên bản đầu tiên là nơi bạn có tệp Manifest chỉ ra lớp chính, phiên bản thứ hai chạy phương thức chính trong lớp Foo
được tìm thấy trong đường dẫn lớp.
Thông tin được trình bày cho Java là một đường dẫn đến tệp jar hoặc tên của lớp được gọi.
Vị trí của bình không đủ quan trọng để trở thành thứ gì đó để mã hóa (và thực tế không phải là một phần của thông số ban đầu). Một Jar có thể được đặt tên bất cứ thứ gì thực sự, và thường bao gồm số phiên bản. Hơn nữa, không có gì đảm bảo rằng lớp thậm chí được lưu trữ trong một .jar (nó có thể đã được trích xuất).
Gọi một ứng dụng Java -jar
chỉ có một cách để nhập nó - lớp được định nghĩa trong Bản kê khai. Không có đổi tên có thể được thực hiện.
Tùy chọn khác, gọi nó với tên lớp chỉ trực tiếp đến đơn vị thực thi. Furthemore, nó không thể được đặt tên nhiều lần - bạn không Bar.class
thể là mã cho class Foo
nó chỉ không hoạt động theo cách đó.
Điều này sẽ cho thấy rằng thực sự không có điểm nào để chuyển thông tin argv[0]
theo nghĩa C cho ứng dụng Java - nó sẽ java
vô nghĩa và tùy tiện hoặc tên của lớp đang được gọi (rằng bạn đang thực thi mã của (bạn có thể làm điều gì đó giống như getClass().getEnclosingClass().getName()
nếu bạn tuyệt vọng ...)).
Có một điểm ở đây, bạn có thể định nghĩa nhiều phương thức chính trong các lớp trong một .jar hoặc trên đường dẫn lớp. Và bạn có thể khiến chúng cư xử khác đi giống như có một loạt các câu lệnh if dựa trên những gì argv[0]
đã được.
Trước đây tôi có mã giống như java -cp Foo.jar com.me.foo.Test
đã gọi Test
phương thức Main của lớp chứ không phải là phương thức được định nghĩa trong phương thức được xác định trong Bản kê khai.
foo.exe
.