Pourquoi les variables statiques ne sont-elles pas autorisées dans les méthodes Java comme dans les fonctions C / C ++?

En C et C ++, vous pouvez faire:

void foo() { static int i = 0; ++i; } 

mais, en Java, vous obtenez une erreur de type 'Illegal modifier for parameter' :

 public void foo() { static int i =0; ++i; } 

Je ne cherche pas les raisons pour lesquelles ou pourquoi pas c’est une bonne / mauvaise idée. Je suis juste curieux de savoir pourquoi c’est légal en C / C ++ , mais pas en Java .

Java est un langage pauvre en fonctionnalités. Il est peu disposé à append des fonctionnalités autres que le jeu le plus simple qui vous permettra d’écrire de bons programmes. Cela signifie que de nombreuses fonctionnalités obscures, et même certaines très utiles disponibles dans d’autres langages, ne sont pas disponibles en Java car il existe généralement un autre moyen de faire la même chose, ou un meilleur moyen, ou bien elles ont décidé qu’il serait préférable de ne pas utiliser cette fonctionnalité. .

Dans ce cas, je suppose que c’est parce que vous pouvez simplement placer le champ en dehors de la méthode et faire à peu près la même chose.

BTW: Java a des méthodes nommées localement, qui sont rarement utilisées et Java n’a pas vraiment besoin d’être si elles étaient minimalistes. 😉

static variables de scope de fonction static sont utiles en C ++ pour éviter le “fiasco d’ordre d’initialisation statique”. Ce n’est pas nécessaire en Java, car il possède un ordre bien spécifié d’initialisations statiques.

Je suppose qu’il est bon d’éviter ces variables, car cela conduit à un comportement déroutant:

 some_code(); static int x = something(); some_code(); 

something() n’est appelée que lors du premier appel, alors que d’autres instructions sont appelées chaque fois que vous utilisez cette fonction.

De plus, les fonctionnalités ne sont pas implémentées par défaut.