Java: Check if command line arguments are null
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.
Solution 4
You should check for (args == null || args.length == 0)
. Although the null
check isn't really needed, it is a good practice.
Comments
-
Bobby S almost 2 years
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.
-
Stephen C over 13 yearsThis is totally incorrect. If an application is launched with no command line arguments, the
main
method will be called with anargs
array whose length is zero. -
Puspendu Banerjee over 13 years@Stephen An array without any element inside, has zero length. Then what's wrong about my answer?
-
Stephen C over 13 years@Puspendu - what is wrong is that
dummy[0]
throws an array index out of bounds exception!! Ditto if you change the program (back) to testingargs[0]
and run it with no arguments. -
Puspendu Banerjee over 13 years@Stephen I have not given any solution rather I tried to describe the issue. Read "If you don't pass any argument then even in that case args gets initialized but without any item/element. Try the following one, you will get the same effect:"
-
Stephen C over 13 yearsOK - I understand now. It would have helped if you hadn't mistyped your first sentence. As written it is unintelligible. I note that you quietly corrected it in your last comment. Sneaky.
-
Puspendu Banerjee over 13 yearsWell, It's nothing "Sneaky", I have just corrected a TYPO "the" to "then"
-
Stephen C over 13 years... without saying so, and at the same time implying that I hadn't read your answer properly. That's the sneaky part!
-
Puspendu Banerjee over 13 yearsPlease check now, I have corrected it on the main post.I appreciate your criticism will help me to become a better writer in future!
-
Stealth Rabbi over 8 years"I have not given any solution rather I tried to describe the issue". Then don't post an answer. Post a comment.
-
Stephen C about 6 yearsThe "corrected" version doesn't actually illustrate anything. You are just trying to test a "dummy" variable, not the actual parameters. And what is more, if you run this "corrected" code you will get an uncaught exception ... not your usage message. The best thing you can do with this Answer is delete it.
-
Stephen C over 5 yearsUnnecessary checks are NOT good practice. The
null
check is unnecessary, but you are correct that thelength
check is necessary, -
AlexH over 3 yearsPlease make this a question. Since it does not answer the question, it doesn't belong here. By asking a question instead, you have a much better chance of getting an answer.