2009-05-11 13 views

Antwort

5

Es gibt absolut keinen Unterschied. Die Statik in dieser Situation wird ignoriert.

Um zu testen, erstellte ich eine groovy Klasse und piped die Ausgabe von "javap -verbose StaticTest" in eine Datei. Setzen Sie dann "static" vor die Klasse def und piped das zu einer zweiten Datei. Ich habe dann die zwei Dateien geteilt. Die einzigen Unterschiede waren die eindeutigen IDs, die der langen Klassen-ID zugeordnet sind, die für jede Klasse neu generiert wird.

2

Beziehen Sie sich auf die statische Klasse oder die statische Methode "main" innerhalb der statischen Klasse?

Das Schlüsselwort "statisch" bedeutet, dass die Zuweisung beginnt, wenn das Programm beginnt und endet, wenn das Programm endet. Mit anderen Worten, es gibt keine Möglichkeit, eine Instanz der Klasse "froob" programmatisch zu erstellen, sondern eine Instanz wird automatisch erstellt, wenn das Programm existiert und existiert, bis das Programm endet.

Im Zusammenhang mit Ihrem kleinen Beispielprogramm ist es effektiv bedeutungslos. Nur die "Haupt" -Klasse muss statisch sein, da sie "existieren" muss, bevor irgendein Code innerhalb des Programms ausgeführt wurde.

+0

Humm. Dies geht aus der Groovy-Konsole statische Klasse froob { static void main (String [] f) { println "huh" println neue froob(). Class.name } } –

+0

Bah zu arbeiten/execute! dumme Kommentarformatierung

 static class froob { static void main(String[]f){ println "huh" println new froob().class.name } } 

0

In Java kann nur eine innere Klasse statisch sein. Vor Groovy 1.7 sind innere Klassen verboten, und das Deklarieren einer Klassenstatic der obersten Ebene hat keine Auswirkungen.

In Groovy 1.7+ Ich erwarte, dass statische innere Klassen die gleiche Semantik wie in Java haben. Das Deklarieren einer Top-Level-Klasse hat wahrscheinlich keine Auswirkungen (oder wird vom Compiler verhindert).