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 vimolarak vi, bir uyumluluk modunda çalışır. Bazen, ilgili birkaç programın bir sürümünü korumaya çalışmaktır - örneğin mailqve newaliasesbirçok unix sisteminde sendmailbu 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 -jartek 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.classbunun için kod olamazsınız, class Foosadece 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 javaanlamsı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.Testhangi Testmanifest tanımlı bir tanımlı bir sınıfın ana yöntemi çağırdı benzer kod vardı .
foo.exe.