是否有一个等效于if __FILE__ == $ 0的Java?

Cas*_*how 0 ruby java equivalent

我知道,在Python和Ruby有该片段if __name__ == '__main__': if __FILE__ == $0,这将只运行如果脚本是直接打开运行.

这似乎是一个非常有用的功能,我没有在Java中看到过(我学校的"官方"编程语言).在Java中有没有相同的东西?如果没有,有没有办法实现它?

jta*_*orn 5

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


Ken*_*oom 5

添加到jthalborn的答案:

真正的问题不是"我如何用Java做到这一点?" 它是"为什么Ruby和Python需要这样的kludge?"

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

(在这方面,C和C++就像Java一样,但是你只能main()在一个程序中有一个函数,所以你需要使用预处理器来决定编译哪一个,或者你需要将不同的main()函数放在不同的文件中,并仅编译您需要的文件.)

  • 我不想为"kludge"/"hack"评论做出这一点,但这是错误的.这是一个设计决策,有效地"执行"包含库可以为您提供有趣的可能性(您知道模块初始化的确切顺序/时刻).人们也可以将Java的模型称为hack,因为在编译期间必须使用已使用的API.不同的方法!= kludge. (2认同)