2011-09-09 11 views
8

El tipo de devolución-el tipo de datos del valor devuelto por el método, o nulo si el método no devuelve un valor.¿Qué hace el vacío en Java?

http://download.oracle.com/javase/tutorial/java/javaOO/methods.html

bien, entonces .. Aquí está mi pregunta:

public class EnumTest { 
    Day day; 

    public EnumTest(Day day) { 
     this.day = day; 
    } 

    public void tellItLikeItIs() { 
     switch (day) { 
      case MONDAY: System.out.println("Mondays are bad."); 
         break; 

      case FRIDAY: System.out.println("Fridays are better."); 
         break; 

      case SATURDAY: 
      case SUNDAY: System.out.println("Weekends are best."); 
         break; 

      default:  System.out.println("Midweek days are so-so."); 
         break; 
     } 
    } 

    public static void main(String[] args) { 
     EnumTest firstDay = new EnumTest(Day.MONDAY); 
     firstDay.tellItLikeItIs(); 
     EnumTest thirdDay = new EnumTest(Day.WEDNESDAY); 
     thirdDay.tellItLikeItIs(); 
     EnumTest fifthDay = new EnumTest(Day.FRIDAY); 
     fifthDay.tellItLikeItIs(); 
     EnumTest sixthDay = new EnumTest(Day.SATURDAY); 
     sixthDay.tellItLikeItIs(); 
     EnumTest seventhDay = new EnumTest(Day.SUNDAY); 
     seventhDay.tellItLikeItIs(); 


    } 
} 

http://download.oracle.com/javase/tutorial/java/javaOO/enum.html

El código anterior no funciona sin vacío.

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    The method tellItLikeItIs() is undefined for the type EnumTest 

¿Qué me perdí? ¿Por qué hay un vacío allí? Y devuelve una cadena?

+0

Todos los métodos en Java deben ser de un tipo de devolución. Anular el envío a la VM de que ese método específico no devolverá nada. –

+0

Escogieron nulo porque va de la mano y de la mano con "nulo". Hubiera preferido usar "vacío" (lo cual suena raro, pero no lo hubiera hecho si lo hubiéramos usado durante 20 o 30 años). – corsiKa

+0

No se puede eliminar la palabra 'vacío' aquí porque eso es lo que la estructura del el lenguaje lo requiere. Las definiciones de los métodos esperan que especifiques el gire el tipo; usted * tiene * para escribirlo en alguna parte. Y eso está justo en frente del nombre del método. –

Respuesta

9

El motivo por el que el código no funcionará sin void es porque el método System.out.println(String string) no devuelve nada y solo imprime los argumentos proporcionados al terminal de salida estándar, que es el monitor de la computadora en la mayoría de los casos. Cuando un método devuelve "nada", debe especificarlo colocando la palabra clave void en su firma.

Se puede ver la documentación de la System.out.println aquí:

http://download.oracle.com/javase/6/docs/api/java/io/PrintStream.html#println%28java.lang.String%29

para presionar la cuestión con mayor detalle, println es un ejemplo clásico de un método que está realizando el cálculo como un "efecto secundario ."

0

Void no devuelve nada; le dice al compilador que el método no tiene un valor de retorno.

0

void significa que no devuelve nada. No devuelve una cadena, usted escribe una cadena en System.out pero no la devuelve.

Debe especificar qué devuelve un método, incluso si solo está diciendo que no devuelve nada.

Técnicamente hablando, podrían haber diseñado el lenguaje de modo que si no escribe un tipo de devolución, entonces se supone que no devuelve nada, sin embargo, escribir explícitamente void ayuda a garantizar que la falta de un valor devuelto sea intencional y no es accidental

+0

¿Cómo es diferente cuando dices, un método no devuelve nada pero imprime algo en la consola – Rudra

13

¿Te refieres al método tellItLikeItIs? Sí, debe especificar void para especificar que el método no devuelve nada. Todos los métodos tienen para tener un tipo de devolución especificado, incluso si es void.

Ciertamente no devuelve una cadena - mira, no hay declaraciones de devolución en ninguna parte. No está muy claro por qué piensas que es devolviendo una cadena. Está imprimiendo cadenas a la consola, pero eso no es lo mismo que devolver uno del método.

0

Cuando el tipo de devolución es nulo, su método no devuelve nada.

Mire nuevamente su código: no hay retorno en ese método. Imprime en la consola y sale.

0

Void: el modificador de tipo void establece que el método principal no devuelve ningún valor. Todos los parámetros de un método se declaran dentro de un anterior de paréntesis. Aquí String args [] declara un parámetro llamado args que contiene una matriz de objetos de la clase tipo cadena.