Java: Check if command line arguments are null
I am looking to do some error checking for my command line arguments
public static void main(String[] args)
{
if(args[0] == null)
{
System.out.println("Proper Usage is: java program filename");
System.exit(0);
}
}
However, this returns an array out of bounds exception, which makes sense. I am just looking for the proper usage.
Solution 1:
The arguments can never be null
. They just wont exist.
In other words, what you need to do is check the length of your arguments.
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);
}
}
Solution 2:
@jjnguy's answer is correct in most circumstances. You won't ever see a null
String in the argument array (or a null
array) if main
is called by running the application is run from the command line in the normal way.
However, if some other part of the application calls a main
method, it is conceivable that it might pass a null
argument or null
argument array.
However(2), this is clearly a highly unusual use-case, and it is an egregious violation of the implied contract for a main
entry-point method. Therefore, I don't think you should bother checking for null
argument values in main
. In the unlikely event that they do occur, it is acceptable for the calling code to get a NullPointerException
. After all, it is a bug in the caller to violate the contract.
Solution 3:
To expand upon this point:
It is possible that the args variable itself will be null, but not via normal execution. Normal execution will use java.exe
as the entry point from the command line. However, I have seen some programs that use compiled C++
code with JNI to use the jvm.dll
, bypassing the java.exe entirely. In this case, it is possible to pass NULL
to the main method, in which case args will be null.
I recommend always checking if ((args == null) || (args.length == 0))
, or if ((args != null) && (args.length > 0))
depending on your need.