这适用于Applet,Servlet,Midlet等的子类。
为什么他们不需要main()
?如果我想创建一个以Craplet
或类似的方式开始的init()
类,那么设计是否糟糕,或者我将如何进行呢?
答案 0 :(得分:17)
实际上这是一个很好的设计,但并不明显,你想做的事情没有效果,所以它有点反直觉。
这些类型的应用程序以容器为生,因此它们的入口点由容器必须遵守的标准决定。这些标准的设计者选择不将入口点称为主要。您可以将您的功能放在重写方法中。所有applet都有以下四种方法:
public void init();
public void start();
public void stop();
public void destroy();
他们拥有这些方法,因为他们的超类java.applet.Applet
具有这些方法。
超类除了虚拟代码外没有任何东西:
public void init() {}
如果您想派生一个类来扩展或更改init()
的名称,您应该实现您的类并让您的方法调用init()
。这将使用多态来让你随心所欲地调用方法。除非您正在编写servlet容器,否则您可能会浪费时间。
答案 1 :(得分:12)
Applet和Servlet不会启动自己的进程。相反,它们在容器内运行。因此,他们不需要静态主方法(启动过程),而是需要与容器交互的方法。
答案 2 :(得分:3)
'main'只是C,C ++和java通常支持的约定,但是例如,如果你直接针对Win32 API编写C或C ++,你不必拥有main(),而是你拥有WinMain函数。
答案 3 :(得分:2)
applet的执行环境(通常是您的Web浏览器)根据呈现它的阶段来调用不同点上的applet方法。与简单的main()
方法相比,这提供了更适合Web的抽象级别。此外,使用main()
方法启动任意Java程序通常会被视为存在安全风险。
答案 4 :(得分:0)
Applet不使用main(),因为当加载applet时,它会自动调用applet类的某些方法来启动并执行applet代码。 和applet有自己的生命周期。