11

这适用于 Applet、Servlet、Midlet 等的子类。

为什么他们不需要一个main()?如果我想创建一个Craplet以或类似的方式开始的类,init()它的设计是否糟糕,或者我将如何去做?

4

5 回答 5

17

它实际上是一个很好的设计,但并不明显,你想做的事情不会有任何效果,所以它有点违反直觉。

这些类型的应用程序生活在容器中,因此它们的入口点由这些容器必须遵守的标准决定。这些标准的设计者选择不将入口点称为 main。您可以将您的功能放在一个被覆盖的方法中。所有小程序都有以下四种方法:

public void init();
public void start();
public void stop();
public void destroy();

他们有这些方法是因为他们的超类java.applet.Applet, 有这些方法。

超类在这些中除了虚拟代码之外什么都没有:

public void init() {}

如果你想派生一个类来扩展或改变你的名字,init()你应该实现你的类并调用你的方法init()。这将使用多态性让您可以随意调用该方法。除非您正在编写 servlet 容器,否则您可能会浪费时间。

于 2009-05-31T13:37:38.303 回答
12

Applet 和 Servlet 不会启动它们自己的进程。相反,它们在容器内运行。因此,它们不需要静态的 main 方法(启动进程),而是一种与容器交互的方法。

于 2009-05-31T13:34:56.717 回答
3

'main' 只是 C、C++ 和 java 通常支持的约定,但例如,如果您直接针对 Win32 API 编写 C 或 C++,则不必使用 main(),而是使用 WinMain。

于 2009-05-31T13:37:47.337 回答
2

小程序的执行环境(通常是您的 Web 浏览器)根据所达到的渲染阶段在不同的点调用小程序方法。main()这提供了比简单方法更适合 Web 的抽象级别。此外,使用方法启动任意 Java 程序main()通常会被认为存在安全风险。

于 2009-05-31T13:36:13.703 回答
0

Applet 不使用 main(),因为当 applet 加载时,它会自动调用 applet 类的某些方法来启动并执行 applet 代码。而且applet有自己的生命周期。

于 2014-10-17T12:42:52.287 回答