2009-05-11 4 views
2

Что делает «статический» в этом файле, sample.groovy?groovy static class

static class froob { 
} 

Кодовый код компилируется с использованием «статического» или без него.

ответ

5

Нет абсолютно никакой разницы. Статичность в этой ситуации игнорируется.

Чтобы проверить, я создал класс groovy и передал результат «javap -verbose StaticTest» в файл. Затем поставьте «static» перед классом def и передайте его во второй файл. Затем я разделил два файла. Единственными отличиями были те уникальные идентификаторы, которые связаны с длинным идентификатором класса, который генерируется новым для каждого класса.

2

Вы имеете в виду статический класс или статический метод «main» в статическом классе?

Ключевое слово "static" означает, что распределение начинается, когда программа начинается и заканчивается, когда программа заканчивается. Другими словами, нет возможности программно создать экземпляр класса «froob», но экземпляр автоматически создается, когда программа существа и будет существовать до окончания вашей программы.

В контексте вашей небольшой программы-образца это фактически бессмысленно. Только «основной» класс должен быть статичным, поскольку он должен «существовать» до того, как какой-либо код в программе был выполнен.

+0

Humm. Это, кажется, работает/выполнить с помощью Groovy консоли статического класс froob { статической силы основных (String [] е) { Println "да" Println нового froob(). Class.name }} –

+0

Ба! глупое форматирование комментариев

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

0

В Java только внутренний класс может быть статическим. До Groovy 1.7 внутренние классы запрещены, и объявление статического класса верхнего уровня не влияет.

В Groovy 1.7+ Я ожидаю, что статические внутренние классы будут иметь ту же семантику, что и в Java. Объявление класса верхнего уровня, вероятно, не повлияет (или будет запрещено компилятором).