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