JLS besagt, dass "innere Klassen statische Elemente nicht deklarieren dürfen, außer sie sind konstante Variablen". Der Grund für dieses Verbot besteht darin, dass eine Klassenvariable in einer objektabhängigen Klasse ein hohes Potenzial zur Erzeugung von Verwirrung aufweist.
Betrachten wir ein einfaches Beispiel:
class Parent {
public class Child {
static int count = 1; // Let's pretend that it is possible
public void increment() {
count++;
}
public void show() {
System.out.println(count);
}
}
public Child generateChild() {
return new Child();
}
}
die wir nun sagen, dass wir dies tun:
Parent p1 = new Parent();
Parent.Child c1 = p1.generateChild();
Parent p2 = new Parent();
Parent.Child c2 = p2.generateChild();
c2.show();
c1.increment();
c2.show();
Ein Zuwachs auf ein Kind von Eltern 1 bewirkt eine Änderung bei einem Kind von einem anderen Elternteil, auch obwohl eine Child
Klasse an seine Parent
Klasse angeschlossen ist, sollten Kinder verschiedener Eltern unabhängige Kontexte haben.
Java-Sprachdesigner argumentierten, dass, wenn Sie dieses Verhalten wirklich wollen, Sie die statische Variable problemlos in die Elternklasse einfügen könnten.
Hier ist [der relevante JLS-Abschnitt] (https://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.1.3) - "Innere Klassen können nicht deklarieren statische Mitglieder, außer sie sind konstante Variablen " – resueman
Siehe auch http://StackOverflow.com/questions/18526099/error-field-name-cannot-be-declared-static – Raedwald