2010-10-06 24 views
65

Ich suche einige Fehler zu tun für meine Befehlszeilenargumente ÜberprüfungJava: Überprüfen Sie, ob Befehlszeilenargumente null sind

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

Dies ist jedoch ein Array zurückgibt außerhalb der Grenzen Ausnahme, die Sinn macht. Ich suche nur nach der richtigen Verwendung.

Antwort

117

Die Argumente können niemals null sein. Sie werden einfach nicht existieren.

Mit anderen Worten, was Sie tun müssen, ist die Länge Ihrer Argumente zu überprüfen.

-8

Wenn Sie kein Argument übergeben, wird auch in diesem Fall args initialisiert, aber ohne Element/Element. folgenden Probieren Sie, werden Sie den gleichen Effekt:


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

Dies ist völlig falsch. Wenn eine Anwendung ohne Befehlszeilenargumente gestartet wird, wird die 'main'-Methode mit einem' args'-Array aufgerufen, dessen Länge Null ist. –

+0

@Stephen Ein Array ohne Element im Inneren, hat keine Länge. Was ist dann falsch an meiner Antwort? –

+0

@Puspendu - was ist falsch ist, dass 'Dummy [0]' wirft einen Array-Index außerhalb der Grenzen Ausnahme !! Dito, wenn Sie das Programm (zurück) zum Testen von 'args [0] 'ändern und es ohne Argumente ausführen. –

12

@ jjnguy Antwort in den meisten Fällen richtig ist. Sie werden nie eine null Zeichenkette im Argument-Array (oder einem null Array) sehen, wenn main aufgerufen wird, indem die Anwendung über die Befehlszeile normal ausgeführt wird.

Wenn jedoch ein anderer Teil der Anwendung eine main Methode aufruft, ist es denkbar, dass es ein Argument oder nullnull Argument Array übergeben könnte.

jedoch (2), ist dies eindeutig ein höchst ungewöhnlicher Anwendungsfall, und es eine ungeheuerliche Verletzung des stillschweigenden Vertrages für ein Verfahren main Einstiegspunktes ist. Daher sollten Sie nicht nach null Argumentwerten in main suchen. In dem unwahrscheinlichen Fall, dass sie auftreten, ist es akzeptabel, dass der aufrufende Code eine NullPointerException erhält. Immerhin ist es ein Fehler im Anrufer, den Vertrag zu verletzen.

0

Sie sollten nach (args == null || args.length == 0) suchen. Obwohl die null Prüfung nicht wirklich benötigt wird, ist es eine gute Übung.

6

auf diesen Punkt zu erweitern:

Es ist möglich, dass die args Variable selbst null sein wird, aber nicht über die normale Ausführung. Bei der normalen Ausführung wird java.exe als Einstiegspunkt von der Befehlszeile verwendet. Ich habe jedoch einige Programme gesehen, die kompilierten C++ Code mit JNI verwenden, um die jvm.dll zu verwenden, die java.exe vollständig umgehen. In diesem Fall ist es möglich, NULL an die Hauptmethode zu übergeben. In diesem Fall sind die Argumente Null.

Ich empfehle immer if ((args == null) || (args.length == 0)) oder if ((args != null) && (args.length > 0)) je nach Bedarf zu überprüfen.

Verwandte Themen