Java: non Pas une déclaration
Je suppose que c'est plus une question à propos de la théorie des langages qu'autre chose. Pourquoi est la première instruction juridique principal, alors que la deuxième ne l'est pas? N'ont-ils pas d'évaluer à la même chose?
public class Main {
public static void main(String[] args) {
foo();
0;
}
public static int foo(){
return 0;
}
}
Parce que c'est une brute primitive, n'est pas un énoncé.
Lire ceci: docs.oracle.com/javase/specs/jls/se7/jls7.pdf en Particulier le chapitre sur les états.
Lire ceci: docs.oracle.com/javase/specs/jls/se7/jls7.pdf en Particulier le chapitre sur les états.
OriginalL'auteur Skyler | 2013-05-16
Vous devez vous connecter pour publier un commentaire.
Java limite les types d'expressions qui sont admis dans ce qu'on appelle "l'expression des états". N'a de sens que les expressions qui ont des effets secondaires potentiels sont autorisés. Il n'autorise pas sémantiquement vide de sens des énoncés comme
0;
oua + b;
. Ils sont tout simplement exclus de la langue grammaire.Un appel de fonction comme
foo()
peut, et en général, ont des effets secondaires, il n'est donc pas dénué de sens de la déclaration. Le compilateur n'a pas profondément inspecter le corps defoo()
pour vérifier si il ne fait rien. L'appel d'une fonction peut ont des effets secondaires, de sorte qu'il est syntaxiquement valide.Cela reflète une différence philosophique entre C/C++ et Java. Java interdit les constructions diverses qui entraîner la mort ou de sens du code.
Le C et le C++ sont relativement laissez-faire à propos de tout cela. Écrivez ce que vous voulez; ils n'ont pas le temps de faire du babysitting.
Citant le Java Langage De Spécification, §14.8 Expression Des Déclarations:
OriginalL'auteur John Kugelman
J'ai modifié ma réponse bits.
OriginalL'auteur Saravana Kumar