Возвращаемое значение из кода Java
Существует класс Java, который создает запрос POST и отправляет его сервлету.
Основной метод файла (test) класса выглядит примерно так:
public static void main(String[] args) throws IOException {
// Code logic goes here...
// No return Statement
}
Это вызвано из KornShell (ksh) script примерно так:
retcode=`$CLK_JAVA_PATH -cp $CLASSPATH test ${PASSWORD} ${HOSTNAME} ${TOOLSET}`
if [ $? != "0" ];then
echo "ERROR:
echo "${retcode}"
else
echo "${SCRIPT} Success"
fi
retcode
всегда имеет значение "2" независимо от того, сбой кода или его успех.
Мой вопрос заключается в том, что возвращаемый тип моего основного метода "void", почему код возвращает некоторое значение?
Ответы
Ответ 1
Возвращаемое значение приложения Java не возвращает значение метода main
, потому что приложение Java не обязательно заканчивается, когда метод main
завершен. p >
Вместо этого JVM заканчивается, когда не запущено нить не-daemon или когда вызывается System.exit()
.
И System.exit()
также является единственным способом указать возвращаемое значение: аргумент, переданный в System.exit()
, будет использоваться как возвращаемое значение процесса JVM для большинства ОС.
Итак, закончите свой метод main()
следующим образом:
System.exit(0);
обеспечит две вещи:
- что ваше приложение Java действительно выходит, когда достигнут конец
main
и
- что возвращаемое значение процесса JVM равно 0
Ответ 2
Программы Java не возвращают код выхода обратно в операционную систему, возвращая значение из main
, как это делается на C и С++. Вы можете выйти из программы и указать код выхода, вызвав System.exit(code);
, например:
// Returns exit code 2 to the operating system
System.exit(2);
Ответ 3
System.exit(0);
Это возвращает код ошибки 0 (все пошло нормально).
System.exit Doc
Ответ 4
Использование
System.exit( someNumber );
это даст вашему приложению контроль над возвращаемым значением, наблюдаемым ОС.
Ответ 5
Ваша программа всегда возвращает код возврата после выхода. В обычных программах, если вы не укажете код возврата, он вернет ноль (сюда входит установка типа возврата на void
).
Java, однако, любит быть особенным! Java не вернет возвращаемый код, возвращаемый в методе Main, но вернет код возврата, когда JVM выйдет (это учитывает многопоточные программы) и вернет то, что указывает вызов System.Exit(returnCode);
.
Ответ 6
Вы не получаете статус выхода, что содержит $?
. Вы получаете стандартную версию, независимо от того, что написано на System.out
.