2011-09-09 3 views
8

Type de retour: le type de données de la valeur renvoyée par la méthode, ou void si la méthode ne renvoie pas de valeur.Que fait void dans java?

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

D'accord, alors .. Voici ma question:

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

Le code ci-dessus ne fonctionne pas sans vide.

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

Qu'est-ce qui m'a manqué? Pourquoi y a-t-il un vide? Et cela renvoie-t-il une chaîne?

+0

Toutes les méthodes dans Java doivent être un type de retour.Vide dit à la machine virtuelle que cette méthode spécifique ne retournera rien –

+0

Ils ont choisi le vide car il va main et main avec "null". J'aurais préféré qu'ils utilisent "vide" (ce qui semble bizarre, mais ne le serait pas si nous l'aurions utilisé depuis 20 ou 30 ans.) – corsiKa

+0

Vous ne pouvez pas supprimer le mot "vide" ici parce que c'est ce que la structure de la Les définitions des méthodes exigent que vous spécifiiez tourner le type; vous * devez * l'écrire quelque part. Et c'est juste devant le nom de la méthode. –

Répondre

9

La raison pour laquelle le code ne fonctionnera pas sans void est que la méthode System.out.println(String string) ne renvoie rien et imprime simplement les arguments fournis au terminal de sortie standard, qui est le moniteur d'ordinateur dans la plupart des cas. Quand une méthode retourne "rien" vous devez spécifier cela en mettant le mot-clé void dans sa signature.

Vous pouvez voir la documentation de la System.out.println ici:

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

Pour insister sur la question plus loin, println est un exemple classique d'une méthode qui effectue le calcul comme un « effet secondaire .

0

Le vide ne renvoie rien; il indique au compilateur que la méthode n'a pas de valeur de retour.

0

void signifie qu'il ne renvoie rien. Il ne renvoie pas de chaîne, vous écrivez une chaîne à System.out mais vous n'en renvoyez aucune.

Vous devez spécifier ce qu'une méthode renvoie, même si vous dites simplement qu'elle ne renvoie rien. Techniquement parlant, ils auraient pu concevoir le langage de telle sorte que si vous n'écrivez pas un type de retour, alors il est supposé ne rien renvoyer, mais vous pouvez écrire explicitement void pour vous assurer que l'absence d'une valeur retournée est intentionnelle et pas accidentel.

+0

En quoi est-ce différent quand vous dites qu'une méthode ne renvoie rien mais qu'elle imprime quelque chose sur la console – Rudra

13

Vous voulez dire la méthode tellItLikeItIs? Oui, vous devez spécifier void pour spécifier que la méthode ne renvoie rien. Toutes les méthodes ont pour qu'un type de retour soit spécifié, même s'il s'agit de void.

Il ne renvoie certainement pas une chaîne - regardez, il n'y a aucune déclaration de retour nulle part. Il n'est pas vraiment clair pourquoi vous pensez que est renvoyant une chaîne. C'est l'impression chaînes à la console, mais ce n'est pas la même chose que de renvoyer un de la méthode.

0

Lorsque le type de retour est vide, votre méthode ne renvoie rien.

Regardez encore votre code: Il n'y a pas de retour dans cette méthode. Vous imprimez sur la console et quittez.

0

Void: le modificateur de type void indique que la méthode principale ne renvoie aucune valeur Tous les paramètres d'une méthode sont déclarés dans une parenthèse avant: String args [] déclare un paramètre nommé args qui contient un tableau de Objets de la chaîne de type classe