2011-07-21 23 views
17

Hay una clase Java que crea una solicitud POST y la envía a un servlet. El método principal del archivo de clase (de prueba) se ve algo como esto:Devuelve el valor de un código Java

public static void main(String[] args) throws IOException { 
    // Code logic goes here... 
    // No return Statement 
} 

esto se le llama desde un KornShell (ksh) guión algo como esto:

retcode=`$CLK_JAVA_PATH -cp $CLASSPATH test ${PASSWORD} ${HOSTNAME} ${TOOLSET}` 

if [ $? != "0" ];then 
     echo "ERROR: 
     echo "${retcode}" 
else 
     echo "${SCRIPT} Success" 
fi 

retcode siempre tiene el valor " 2 "independiente de si el código falla o tiene éxito. Mi pregunta es porque el tipo de devolución de mi método principal es "vacío" ¿por qué el código está devolviendo algún valor?

Respuesta

17

Los programas de Java no devuelven un código de salida al sistema operativo devolviendo un valor desde main, como se hace en C y C++. Puede salir del programa y especificar el código de salida llamando System.exit(code);, por ejemplo:

// Returns exit code 2 to the operating system 
System.exit(2); 
4

Uso

System.exit(someNumber); 

esto le dará a su aplicación de control sobre el valor de retorno visto por el sistema operativo.

34

El valor de retorno de una aplicación Java es no el valor de retorno es de main método, debido a que una aplicación Java no termina necesariamente cuando es main método ha terminado la ejecución.

En su lugar, la JVM finaliza cuando no se están ejecutando más subprocesos no-daemon o cuando se llama al System.exit().

Y System.exit() es también la única forma de especificar el valor de retorno: el argumento pasado a System.exit() se usará como el valor de retorno del proceso de JVM en la mayoría de los sistemas operativos.

Así termina su método de main() con esto:

System.exit(0); 

se asegurará de dos cosas:

  • que la aplicación Java realmente sale cuando se alcanza el final de main y
  • que el retorno el valor del proceso de JVM es 0
+1

Esta debería ser la respuesta aceptada ya que tiene una mejor explicación del funcionamiento interno. – searchengine27

2

Su programa siempre devuelve un código de retorno después de salir. En los programas normales, si no especifica un código de retorno, devolverá cero (esto incluye establecer el tipo de devolución en void).

¡Java, sin embargo, le gusta ser especial! Java no devolverá el código de retorno que regrese con el método Principal, pero devolverá un código de retorno cuando la JVM se cierre (esto representa programas de subprocesamiento múltiple) y devolverá lo que especifique una llamada System.Exit(returnCode);.

1

No obtiene el estado de salida, eso es lo que contiene $?. Obtiene el estándar, lo que está escrito en System.out.

Cuestiones relacionadas