Bazı durumlarda, bir program farklı şekillerde çalıştırılabilir ve nasıl adlandırıldığı konusunda farklı davranışlar sergileyebilir. Eğer ararsanız vim
olarak vi
, bir uyumluluk modunda çalışır. Bazen, ilgili birkaç programın bir sürümünü korumaya çalışmaktır - örneğin mailq
ve newaliases
birçok unix sisteminde sendmail
bu programların senkronize kalması için bir bağlantı vardır )
Java programları genellikle şu şekilde çağrılır:
% java -jar foo.jar argümanlar
% java Foo değişkenleri
İlk sürüm, ana sınıfı gösteren bir Manifest dosyanızın bulunduğu yerdir; ikinci sürüm Foo
, sınıf yolunda bulunan sınıftaki ana yöntemi çalıştırır .
Java için sunulan bilgiler, kavanoza giden bir yol veya çağrılan sınıfın adıdır.
Kavanozun yeri kodlanacak bir şey olacak kadar önemli değil (ve aslında orijinal spesifikasyonun bir parçası değildi). Bir Kavanoz gerçekten herhangi bir şey olarak adlandırılabilir ve genellikle sürüm numaralarını içerir. Dahası, sınıfın bir .jar'da bile saklandığının garantisi yoktur (ayıklanmış olabilir).
Birlikte bir Java uygulamasını çağırmanın -jar
tek bir yolu vardır - Manifest'te tanımlanan sınıf. Yapılacak yeniden adlandırma yoktur.
Diğer seçenek, sınıf adıyla çağrılması doğrudan yürütme birimine işaret eder. Dahası, çarpı olarak adlandırılamaz - Bar.class
bunun için kod olamazsınız, class Foo
sadece bu şekilde çalışmaz.
Bu argv[0]
, C anlamındaki bilgileri bir Java uygulamasına iletmenin gerçekten bir anlamı olmadığını göstermelidir - ya ya java
anlamsız ve keyfi olacak ya da çağrılan sınıfın adı (zaten kod yürütüyorsunuz) ( getClass().getEnclosingClass().getName()
çaresiz olsaydın gibi bir şey yapabilirsin ...)).
Burada bir nokta var, bir .jar veya sınıf yolundaki sınıflarda birden fazla Ana yöntem tanımlayabilirsiniz. Ve onlara, neye dayalı bir dizi if ifadesi varmış gibi farklı davranmalarını sağlayabilirsiniz argv[0]
.
Geçmişte java -cp Foo.jar com.me.foo.Test
hangi Test
manifest tanımlı bir tanımlı bir sınıfın ana yöntemi çağırdı benzer kod vardı .
foo.exe
.