Java: compruebe si los argumentos de la línea de comandos son nulos

Estoy buscando hacer algún error para verificar mis argumentos de línea de comando

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

Sin embargo, esto devuelve una excepción de matriz fuera de límites, lo cual tiene sentido. Solo estoy buscando el uso adecuado.

Los argumentos nunca pueden ser null . Simplemente no existirán.

En otras palabras, lo que necesita hacer es verificar la duración de sus argumentos.

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

La respuesta de @jjnguy es correcta en la mayoría de las circunstancias. Nunca verá una Cadena null en la matriz de argumentos (o una matriz null ) si se ejecuta main ejecutando la aplicación desde la línea de comandos de la manera normal.

Sin embargo, si alguna otra parte de la aplicación llama a un método main , es concebible que pueda pasar un argumento null o una matriz de argumento null .

Sin embargo (2), este es claramente un caso de uso altamente inusual, y es una violación atroz del contrato implícito para un método main de punto de entrada. Por lo tanto, no creo que deba molestarse en buscar valores de argumento null en main . En el caso improbable de que ocurran, es aceptable que el código de llamada obtenga una NullPointerException . Después de todo, es un error en la persona que llama violar el contrato.

Para ampliar sobre este punto:

Es posible que la variable args en sí sea nula, pero no a través de la ejecución normal. La ejecución normal usará java.exe como punto de entrada desde la línea de comando. Sin embargo, he visto algunos progtwigs que usan código comstackdo de C++ con JNI para usar jvm.dll , omitiendo completamente el java.exe. En este caso, es posible pasar NULL al método principal, en cuyo caso args será nulo.

Recomiendo siempre verificar if ((args == null) || (args.length == 0)) , o if ((args != null) && (args.length > 0)) dependiendo de su necesidad.

Debería verificar (args == null || args.length == 0) . Aunque la verificación null no es realmente necesaria, es una buena práctica.

Si no pasa ningún argumento, incluso en ese caso args se inicializa pero sin ningún elemento / elemento. Prueba el siguiente, obtendrás el mismo efecto :

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