wake-up-neo.com

Java: Überprüfen Sie, ob die Befehlszeilenargumente null sind

Ich suche nach einer Fehlerprüfung für meine Befehlszeilenargumente

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

Dies gibt jedoch eine Ausnahme außerhalb des gültigen Bereichs zurück, was sinnvoll ist. Ich bin nur auf der Suche nach der richtigen Verwendung.

80
Bobby S

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

Sie müssen also die Länge Ihrer Argumente überprüfen.

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);
    }
}
144
jjnguy

@ jjnguys Antwort ist in den meisten Fällen richtig. Sie werden niemals einen null String im Argumentarray (oder einem null Array) sehen, wenn main aufgerufen wird, indem die Anwendung über die Befehlszeile in der ausgeführt wird normale Art und Weise.

Wenn jedoch ein anderer Teil der Anwendung eine main -Methode aufruft, ist es vorstellbar, dass ein null -Argument oder ein null -Argumentarray übergeben wird.

(2) Dies ist jedoch eindeutig ein äußerst ungewöhnlicher Anwendungsfall. nd Dies ist eine ungeheure Verletzung des implizierten Vertrages für eine main Einstiegspunktmethode. Daher denke ich nicht, dass Sie sich die Mühe machen sollten, in null nach main Argumentwerten zu suchen. In dem unwahrscheinlichen Fall, dass sie auftreten, ist es akzeptabel, dass der aufrufende Code ein NullPointerException erhält. Immerhin ist es ein Fehler im Anrufer, den Vertrag zu verletzen.

15
Stephen C

Um diesen Punkt zu erweitern:

Es ist möglich, dass die Variable args selbst null ist, jedoch 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 den jvm.dll Zu verwenden, wobei die Java.exe vollständig umgangen wurde. In diesem Fall ist es möglich, NULL an die main-Methode zu übergeben. In diesem Fall ist args null.

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

9
Sean Crouse