PythonとRubyには、スクリプトが直接開かれた場合にのみ実行されるスニペットif __name__ == '__main__':
とがあります。if __FILE__ == $0
これは、Java(私の学校の「公式」プログラミング言語)では見たことがない、本当に便利な機能のようです。Javaでこれに相当するものはありますか?そうでない場合、それを実装する方法はありますか?
PythonとRubyには、スクリプトが直接開かれた場合にのみ実行されるスニペットif __name__ == '__main__':
とがあります。if __FILE__ == $0
これは、Java(私の学校の「公式」プログラミング言語)では見たことがない、本当に便利な機能のようです。Javaでこれに相当するものはありますか?そうでない場合、それを実装する方法はありますか?
jthalbornの答えに追加するには:
本当の問題は、「Javaでこれを行うにはどうすればよいか」ではありません。それは「なぜRubyとPythonがそのような応急修理を必要とするのか」です。
答えは、RubyとPythonは、ファイルが(ライブラリまたはメインプログラムとして)ロードされるときに最初から最後までファイルを実行することを想定しているため、「この部分を実行しないでください」と言うハックが必要です。 mはライブラリとして呼び出されます」。Javaは、ファイルまたはクラスを最初から最後まで実行することを期待していません。特定のクラスにmain()
、そのクラスがメインプログラムとして使用されているときのコードを含むがあります。したがって、Javaはこのハックを必要としません。
(CとC ++はこの点でJavaに似ていますがmain()
、プログラムに含めることができる関数は1つだけなので、プリプロセッサを使用してどちらをコンパイルするかを決定するか、異なるmain()
関数を異なるファイルに配置する必要があります。 、必要なファイルのみをコンパイルします。)
javaにはpublic static void main(String[] args)
メソッドがあります。これは、クラスがコマンドラインからメインクラスとして実行されるときに呼び出され、通常はそのようなシナリオでのみ呼び出されます(直接呼び出すこともできますが、通常は意味がありません)。したがって、Javaでは、標準はこのメソッドに「メイン呼び出し」ロジックを配置することです。
スタックトレースを取得し、最初の方法を見てください。
Throwable t = new Throwable();
StackTraceElement[] elems = t.getStackTrace();
... elems[elems.length-1] should contain a main method ... check if it is yours :) ...