0

我知道在 Python 和 Ruby 中有片段if __name__ == '__main__': if __FILE__ == $0,只有在直接打开脚本时才会运行。

这似乎是我在 Java(我学校的“官方”编程语言)中没有看到的一个非常有用的特性。Java中是否有与此等价的东西?如果没有,有什么方法可以实现吗?

4

3 回答 3

5

java有public static void main(String[] args)方法。当一个类作为主类从命令行运行时调用它,并且通常在这种情况下调用(你可以直接调用它,但它通常没有意义)。所以,在java中,标准是把“主调用”逻辑放在这个方法中。

于 2011-04-17T22:24:43.393 回答
5

要添加到jthalborn 的答案

真正的问题不是“我如何在 Java 中做到这一点?” 它是“为什么 Ruby 和 Python 需要这样的组合?”

答案是 Ruby 和 Python 期望在文件加载时从头到尾执行文件(作为库或作为主程序),所以你需要一个 hack 说“如果我不运行这部分” m 被称为图书馆”。Java 不期望从头到尾运行文件或类。它有main()一个特定的类,其中包含该类用作主程序时的代码。因此,Java 不需要这种 hack。

(C和C++在这方面和Java很像,但是程序中只能有一个main()函数,所以要么需要借助预处理器来决定编译哪个,要么需要将不同main()的函数放在不同的文件中,并且只编译你需要的文件。)

于 2011-04-17T22:34:02.097 回答
0

获取堆栈跟踪并查看第一种方法:

Throwable t = new Throwable();
StackTraceElement[] elems = t.getStackTrace();
... elems[elems.length-1] should contain a main method ... check if it is yours :) ...
于 2011-04-17T22:05:04.773 回答