2009-05-31 22 views
11

Esto se aplica a las subclases de Applet, Servlet, Midlet, etc.¿Por qué los applets no necesitan un main()?

¿Por qué no necesitan un main()? Si quisiera crear una clase Craplet que empiece en init() o algo similar, ¿es un mal diseño o cómo lo haré?

Respuesta

17

En realidad es un buen diseño, pero no es obvio y lo que quiere hacer no tendría ningún efecto, por lo que es un poco contra intuitivo.

Estos tipos de aplicaciones viven sus vidas en contenedores y, como tales, sus puntos de entrada están determinados por los estándares que deben cumplir esos contenedores. Los diseñadores de estos estándares eligieron no llamar al punto de entrada principal. Colocarías tu funcionalidad en un método reemplazado. Todos los applets tienen los siguientes cuatro métodos:

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

que tienen estos métodos debido a que su superclase, java.applet.Applet, tiene estos métodos.

La superclase no tiene nada de código ficticio en éstos:

public void init() {} 

Si desea derivar una clase de ampliar o cambiar el nombre de init() se debe implementar la clase y tener su llamada al método init(). Esto usaría polimorfismo para que puedas llamar al método como quieras. A menos que esté escribiendo un contenedor de servlets, es probable que esté perdiendo el tiempo.

11

Los applets y los servlets no comienzan su propio proceso. En cambio, corren dentro de un contenedor. Por lo tanto, no necesitan un método principal estático (que inicia el proceso), sino una forma de interactuar con su contenedor.

2

El entorno de ejecución de un applet (generalmente, su navegador web) llama a los métodos del applet en diferentes puntos dependiendo de la etapa de renderización que se alcance. Eso proporciona un nivel de abstracción más adecuado para la web que un simple método main(). Además, el lanzamiento de programas Java arbitrarios con los métodos main() generalmente se consideraría como un riesgo de seguridad.

3

'main' es solo una convención que C, C++ y java suelen admitir, pero, por ejemplo, si escribe C o C++ directamente contra la API de Win32, no necesita tener main(), sino que tener WinMain

+0

He estado con solo una convención, pero +1 en verdad ... Me enojo tanto cuando los nombres son la mejor opción ... ¿por qué no lo nombraron principal sin argumentos? – ojblass

+1

porque es el mecanismo para pasar argumentos de línea de comandos ... –

+0

Al menos WinMain tenía alguna referencia a ser un punto de entrada. Pero supongo que es diferente porque WinMain estaba realmente a cargo y no esclavo. Supongo que tienes razón. – ojblass

0

Applet no use main() porque cuando se carga el applet llama automáticamente a ciertos métodos de la clase applet para iniciar y ejecuta el código del applet. y el applet tienen su propio ciclo de vida.

Cuestiones relacionadas