Direkt in class
, ist ein Block ein instance initializer block. Sie können statische Variablen in einem Instanzinitialisierungsblock nicht deklarieren. Entfernen Sie es einfach aus dem Block:
public class A {
static int a=1;
}
Instanz initializer Blöcke aufgerufen werden, wenn Instanzen erstellt werden, vor dem Code in irgendwelchen Instanzkonstruktoren. Es macht also Sinn, dass man dort keine Mitglieder (statisch oder anders) deklarieren kann. Sie sind Code, wie in einem Konstruktor. Beispiel:
import java.util.Random;
public class Example {
private String name;
private int x;
private int y;
{ // This is the
this.x = new Random().nextInt(); // instance
this.y = this.x * 2; // initializer
} // block
public Example() {
this.name = null;
}
public Example(String name) {
this.name = name;
}
}
In den oben genannten, unabhängig von der Konstruktor verwendet wird, das erste, das in den Konstruktor durch den Code in der Instanz Initialisierer Block, gefolgt ist der Code geschieht, der verwendet wurde.
Es gibt auch static
Initialisierungsblöcke, die das Gleiche für statische Sachen tun, wenn die Klasse geladen wird. Sie beginnen mit dem Stichwort static
, mehr im obigen Link.
so versuchen Sie nicht nur * zu initialisieren *, sondern auch zu * deklarieren *, was dort für statische Mitglieder nicht erlaubt ist. –
Was würden Sie davon erwarten? Innerhalb von Instanzinitialisierungen deklarierte Variablen sind lokale Variablen, und Sie können keine lokale Variable statisch machen ... –