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 vimnhư 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ụ mailqvà newaliasestrên nhiều hệ thống unix là một liên kết để sendmailcá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 -jarchỉ 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.classthể là mã cho class Foonó 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ẽ javavô 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 Testphươ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.