我知道在Python和Ruby中有片段if __name__ == '__main__':
和if __FILE__ == $0
,只有在直接打开脚本时才会运行。
这似乎是一个非常有用的功能,我没有在Java(我学校的“官方”编程语言)中看到过。在Java中有没有相同的东西?如果没有,有没有办法实现它?
答案 0 :(得分:5)
java有public static void main(String[] args)
方法。当一个类从命令行作为主类运行时调用它,并且在这种情况下通常只调用 (你可以直接调用它,但它通常没有意义)。所以,在java中,标准是在这个方法中加入“主调用”逻辑。
答案 1 :(得分:5)
真正的问题不是“我如何用Java做到这一点?”它是“为什么Ruby和Python需要这样的kludge?”
答案是Ruby和Python期望在加载文件时从头到尾执行文件(作为库或主程序),所以你需要一个hack来说“不要运行这个部分如果我被称为图书馆“。 Java没有期望从头到尾运行文件或类。它在特定类中有main()
,其中包含该类何时用作主程序的代码。因此,Java不需要这个hack。
(在这方面,C和C ++就像Java一样,但是你只能在一个程序中有一个main()
函数,所以你要么需要使用预处理器来决定编译哪一个,要么就是你需要将不同的main()
函数放在不同的文件中,并仅编译所需的文件。)
答案 2 :(得分:0)
获取堆栈跟踪并查看第一种方法:
Throwable t = new Throwable();
StackTraceElement[] elems = t.getStackTrace();
... elems[elems.length-1] should contain a main method ... check if it is yours :) ...