2009-05-11 5 views
2

Que fait le 'static' dans ce fichier, sample.groovy?groovy static class

static class froob { 
} 

Le code groovy compile bien avec «statique» ou sans elle.

Répondre

5

Il n'y a absolument aucune différence. Le statique dans cette situation est ignoré.

Pour tester, j'ai créé une classe groovy et j'ai redirigé la sortie de "javap -verbose StaticTest" vers un fichier. Ensuite, placez "static" avant la classe def et placez-le dans un second fichier. J'ai ensuite différé les deux fichiers. Les seules différences étaient les identifiants uniques associés à l'ID de classe longue généré pour chaque classe.

2

Faites-vous référence à la classe statique ou à la méthode statique "main" dans la classe statique?

Le mot clé "statique" signifie que l'allocation commence lorsque le programme commence et se termine à la fin du programme. En d'autres termes, il n'y a aucun moyen de créer par programmation une instance de classe "froob", mais plutôt une instance est créée automatiquement lorsque le programme existe et existera jusqu'à ce que votre programme se termine.

Dans le contexte de votre petit programme d'exemple, il est effectivement sans signification. Seule la classe "main" doit être statique, car elle doit "exister" avant que tout code ait été exécuté dans le programme.

+0

Humm. Cela semble fonctionner/exécuter à partir de la console Groovy froob static class { statique void main (String [] f) { println "hein" println nouvelle froob(). Class.name }} –

+0

Bah! commentaire stupide formatage

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

0

En Java, seule une classe interne peut être statique. Avant Groovy 1.7, les classes internes sont interdites, et la déclaration d'une classe statique de haut niveau n'a aucun effet. Dans Groovy 1.7+, je m'attends à ce que les classes internes statiques aient la même sémantique qu'en Java. Déclarer une classe de premier niveau n'aura probablement aucun effet (ou sera interdit par le compilateur).