2011-09-14 22 views

Respuesta

12

Una sentencia return sin valor puede única usarse en un método void (o un constructor), y simplemente realiza la parte de "regresar del método ahora". Pensar en una instrucción return-con-valor ha tener dos propósitos:

  • finalizar la ejecución del método actual (vía finally bloques, por supuesto)
  • Realización de un valor calculado en el método disponible para la persona que llama

La declaración de devolución en un método void simplemente logra el primero de estos; el segundo no tiene sentido en un método void.

De section 14.17 de la especificación del lenguaje Java:

Una sentencia return sin expresión debe estar contenida en el cuerpo de un método que se declara, usando la palabra clave vacío, no devuelve ningún valor (§8.4), o en el cuerpo de un constructor (§8.8). Se produce un error en tiempo de compilación si aparece una declaración de devolución dentro de un inicializador de instancia o un inicializador estático (§8.7). Una declaración de devolución sin expresión intenta transferir el control al invocador del método o constructor que lo contiene. Para ser precisos, una declaración de devolución sin expresión siempre se completa abruptamente, siendo la razón una devolución sin valor.

+2

oficialmente puedo dar fe de que no puedo vencer a Jon Skeet. –

+0

¡Toda una explicación de una pregunta tan simple, increíble! @Jon puede publicar un libro de todas las respuestas que ha dado aquí en stackoverflow, o puede ser libros. :-) – kaps

+0

@kaps: Mi próximo libro probablemente sea una descarga de "mis pensamientos sobre el desarrollo" :) –

4

Su declaración de devolución no tiene argumento, por lo que no devuelve nada, por lo tanto, el valor devuelto es 'nulo'.

1

En cualquier punto de un Método cuando se ejecuta return statement, simplemente sale del método. Por lo tanto, volver aquí acaba de terminar aquí la ejecución de su método.
Si intenta algo (algún valor) de un método de vacío por ejemplo
return"xzy";
Usted recibirá el error complition
Void methods cannot return a value

0

La instrucción return también se puede usar para hacer que la ejecución vuelva a la persona que llama de este método. Por lo tanto, la declaración de devolución terminará inmediatamente el método en el que se ejecuta.

Por lo tanto, el código de ejemplo:

void nothingDohere() { 
    return ; 
} 

Termina la llamada al método y regresa inmediatamente a la persona que llama del método.

0

En el caso mencionado por usted, el retorno es semánticamente superfluo (aunque se necesita sintácticamente, Javac no compilará sin este retorno). La devolución termina el método.

Sin embargo, en algunos casos se desea tener múltiples orificios de salida en un método, p.de esta manera:

public void doDifferentThings(){ 
    if(){ 
     //something done 
     return; 
    } 
    else{ 
     //something else done 
     return; 
    } 
} 

Algunos consideran que esta mal diseño (en contradicción con un solo punto de salida), sin embargo, puede mantener su código más limpio.

0

Simplemente, devuelve desde el interior del método nula en la posición en la que el programa llama ese método:

public calss Test 
{ 
    private boolean flag = true; 
    public Test() 
    { 
     ... // (1) 
     ... // (2) 
     voidMethod(); // (3) 
     ... // (7) 
     ... // (8) 
    } 
    private void voidMethod() 
    { 
     ... // (4) 
     ... // (5) 
     if(flag) return; // (6) 
     ... 
     ... 
    } 
} 
0

Cuando regrese de una función, que devuelva el control a la función de llamar a la función de regresar. Si devuelve un valor, la función de llamada obtendrá ese valor, de lo contrario, la función de llamada solo obtendrá el control.

Cuestiones relacionadas