Java: Komut satırı bağımsız değişkenlerinin boş olup olmadığını kontrol edin


89

Komut satırı argümanlarımı kontrol etmek için bazı hata kontrolleri yapmak istiyorum

public static void main(String[] args)
{
    if(args[0] == null)
    {
        System.out.println("Proper Usage is: java program filename");
        System.exit(0);
    }
}

Ancak bu, mantıklı olan sınırların dışında bir istisna dizisi döndürür. Ben sadece doğru kullanımı arıyorum.

Yanıtlar:


161

Tartışmalar asla olamaz null. Sadece var olmayacaklar.

Başka bir deyişle, yapmanız gereken, argümanlarınızın uzunluğunu kontrol etmektir.

public static void main(String[] args)
{
    // Check how many arguments were passed in
    if(args.length == 0)
    {
        System.out.println("Proper Usage is: java program filename");
        System.exit(0);
    }
}

18

@ jjnguy'un cevabı çoğu durumda doğrudur. Uygulama çalıştırılarak çağrıldığında normal şekilde komut satırından çalıştırılırsa null, bağımsız değişken dizisinde (veya bir nulldizide) bir String görmezsiniz main.

Bununla birlikte, uygulamanın başka bir kısmı bir mainyöntemi çağırırsa , bir nullargüman veya nullargüman dizisini iletebileceği düşünülebilir .

Bununla birlikte (2), bu açıkça oldukça alışılmadık bir kullanım durumudur ve bir maingiriş noktası yöntemi için zımni sözleşmenin çok ağır bir ihlalidir . Bu nedenle, nulliçindeki argüman değerlerini kontrol etmeye zahmet etmemelisiniz main. Olası olmayan bir durumda meydana gelmeleri durumunda, çağıran kodun bir NullPointerException. Sonuçta, arayanın sözleşmeyi ihlal etmesi bir hatadır.


11

Bu noktayı genişletmek için:

Args değişkeninin kendisinin boş olması, ancak normal yürütme yoluyla olmaması olasıdır. Normal yürütme java.exe, komut satırından giriş noktası olarak kullanılacaktır. Ancak, java.exe'yi tamamen atlayarak C++kullanmak için JNI ile derlenmiş kod kullanan bazı programlar gördüm jvm.dll. Bu durumda NULLana yönteme geçmek mümkündür , bu durumda args boş olacaktır.

Her zaman kontrol etmenizi if ((args == null) || (args.length == 0))veya if ((args != null) && (args.length > 0))ihtiyacınıza göre yapmanızı öneririm .


0

Kontrol etmelisiniz (args == null || args.length == 0). Her ne kadar nullçek gerçekten gerekli değildir, iyi bir uygulamadır.


1
Gereksiz kontroller iyi uygulama DEĞİLDİR. nullÇek gereksizdir, ancak bu doğru length, onay gereklidir
Stephen C

0

Komut satırı tartışmasının herhangi bir özel konumunun geçilip geçilmediğini kontrol etmek istersem nasıl kontrol edebilirim? örneğin bazı senaryolarda 2 komut satırı değişkeni geçilecek ve bazılarında sadece bir tanesi geçilecek, o zaman özel komut satırının geçip geçmediğini nasıl kontrol eder?

public class check {

public static void main(String[] args) {
if(args[0].length()!=0)
{
System.out.println("entered first if");
}
if(args[0].length()!=0 && args[1].length()!=0)
{
System.out.println("entered second if");
}
}
}

Yani yukarıdaki kodda eğer args [1] geçilmezse o zaman java.lang.ArrayIndexOutOfBoundsException:

Öyleyse, ikinci tartışmanın geçilip geçilmediğini kontrol edebileceğim ve geçilirse girip girmediğim bu konuyla nasıl başa çıkacağım. en kısa zamanda yardıma ihtiyacım var.


Lütfen bunu bir soru haline getirin. Soruya cevap vermediği için buraya ait değil. Bunun yerine bir soru sorarak, cevap alma şansınız çok daha yüksektir.
AlexH

-10

Herhangi bir argüman iletmezseniz, bu durumda bile argümanlar başlatılır, ancak herhangi bir öğe / öğe olmadan. Aşağıdakini deneyin, aynı etkiyi elde edeceksiniz :

 
public static void main(String[] args) throws InterruptedException {
        String [] dummy= new String [] {};
        if(dummy[0] == null)
        {
            System.out.println("Proper Usage is: java program filename");
            System.exit(0);
        }

    }


1
Bu tamamen yanlıştır. Bir uygulama komut satırı bağımsız değişkenleri olmadan başlatılırsa, mainyöntem argsuzunluğu sıfır olan bir diziyle çağrılır .
Stephen C

@Stephen İçinde herhangi bir eleman olmayan bir dizinin uzunluğu sıfırdır. O halde cevabımın nesi yanlış?
Puspendu Banerjee

@Puspendu - yanlış olan şey dummy[0], sınır istisnasının dışında bir dizi indeksini atmasıdır !! Programı (geri) teste değiştirirseniz args[0]ve bağımsız değişken olmadan çalıştırırsanız aynen.
Stephen C

1
Tamam şimdi anladım. İlk cümlenizi yanlış yazmasaydınız yardımcı olabilirdi. Yazıldığı gibi anlaşılmaz. Son yorumunuzda bunu sessizce düzelttiğinizi not ediyorum. Sinsi.
Stephen C

1
"Çözüm vermedim, sorunu anlatmaya çalıştım". O zaman bir cevap göndermeyin. Bir yorum gönderin.
Stealth Rabbi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.