2009-05-11 6 views
2

このファイルsample.groovyでは何が「静的」ですか?groovy static class

static class froob { 
} 

groovyコードは 'static'または 'static'でコンパイルされます。

答えて

5

違いは全くありません。この状況の静的は無視されます。

テストするために、私はGroovyクラスを作成し、 "javap -verbose StaticTest"の出力をファイルにパイプしました。その後、クラスdefの前に "static"を置き、それを2番目のファイルにパイプします。私は2つのファイルを比較しました。唯一の違いは、すべてのクラスに対して新しいものが生成される長いクラスIDに関連付けられたユニークなIDです。

2

静的クラス内の静的メソッドまたは静的メソッド "main"を参照していますか?

「静的」というキーワードは、プログラムの開始時に割り当てが開始され、プログラムが終了すると終了することを意味します。つまり、 "froob"というクラスのインスタンスをプログラムで作成する方法はありませんが、プログラムが存在するときにインスタンスが自動的に作成され、プログラムが終了するまで存在します。

小さなサンプルプログラムの文脈では、それは事実上無意味です。プログラム内のコードが実行される前に "存在する"必要があるため、 "メイン"クラスだけが静的である必要があります。

+0

Humm。これは、Groovyのコンソール 静的クラスfroob { 静的な無効メイン(文字列[] F){ の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と同じセマンティクスを持つことを期待しています。トップレベルのクラスを宣言することは効果がない(またはコンパイラによって禁止される)可能性があります。

関連する問題