There is a Java class which creates a POST request and sends it to a servlet. The main method of the class file (test) looks something like this:
public static void main(String[] args) throws IOException {
// Code logic goes here...
// No return Statement
}
This is called from a KornShell (ksh) script something like this:
retcode=`$CLK_JAVA_PATH -cp $CLASSPATH test ${PASSWORD} ${HOSTNAME} ${TOOLSET}`
if [ $? != "0" ];then
echo "ERROR:
echo "${retcode}"
else
echo "${SCRIPT} Success"
fi
retcode
always has the value "2" independent of if the code fails or succeeds.
My question is since the return type of my main method is "void" why is the code returning some value?
The return value of a Java application is not the return value of it's main
method, because a Java application doesn't necessarily end when it's main
method has finished execution.
Instead the JVM ends when no more non-daemon threads are running or when System.exit()
is called.
And System.exit()
is also the only way to specify the return value: the argument passed to System.exit()
will be used as the return value of the JVM process on most OS.
So ending your main()
method with this:
System.exit(0);
will ensure two things:
main
is reached and