2009-05-31 13 views
11

Questo vale per sottoclassi di applet, servlet, midlet, ecc.Perché le applet non hanno bisogno di main()?

Perché non è necessario un main()? Se volevo creare una classe Craplet che inizi a init() o qualcosa di simile, è una cattiva progettazione, o come farei per farlo?

risposta

17

In realtà è un buon design ma non è ovvio e quello che vuoi fare non ha alcun effetto quindi è un po 'contro-intuitivo.

Questi tipi di applicazioni vivono la loro vita in contenitori e in quanto tali i loro punti di ingresso sono determinati dalle norme a cui i contenitori devono aderire. I progettisti di questi standard hanno scelto di non chiamare il punto di ingresso principale. Inseriresti le tue funzionalità in un metodo sottoposto a override. Tutte le applet hanno i seguenti quattro metodi:

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

Hanno questi metodi, perché la loro superclasse, java.applet.Applet, ha questi metodi.

La superclasse non ha nulla ma il codice fittizio in questi:

public void init() {} 

Se si vuole derivare una classe per estendere o modificare il nome di init() è necessario implementare la tua classe e la tua chiamata di metodo init(). Questo userebbe il polimorfismo per farti chiamare il metodo come preferisci. A meno che tu non stia scrivendo un container servlet, probabilmente stai sprecando il tuo tempo.

11

Applet e Servlet non avviano il proprio processo. Invece corrono dentro un contenitore. Pertanto, non hanno bisogno di un metodo principale statico (che avvia il processo), ma un modo per interagire con il loro contenitore.

2

L'ambiente di esecuzione di un'applet (in genere, il browser Web) chiama i metodi dell'applet in punti diversi a seconda di quale fase del rendering viene raggiunta. Ciò fornisce un livello di astrazione più adatto per il web rispetto a un semplice metodo main(). Inoltre, l'avvio di programmi Java arbitrari con i metodi main() di solito sarebbe considerato un rischio per la sicurezza.

3

'main' è solo una convenzione che C, C++ e java supportano comunemente, ma ad esempio, se si scrive C o C++ direttamente contro l'API Win32, non è necessario avere main(), ma invece si avere WinMain.

+0

Ho manzo con la sua convenzione ma +1 per vero ... Mi arrabbio molto quando i nomi sono la scelta migliore ... perché non lo chiamano principale senza argomenti? – ojblass

+1

perché è il meccanismo per passare gli argomenti della riga di comando ... –

+0

Almeno WinMain aveva qualche riferimento ad essere un punto di ingresso. Ma suppongo sia diverso perché WinMain era effettivamente in carica e non uno schiavo. Credo che tu abbia ragione. – ojblass

0

L'applet non usa main() perché quando viene caricata l'applet richiama automaticamente determinati metodi di avvio della classe di applet ed esegue il codice dell'applet. e l'applet ha il proprio ciclo di vita.

Problemi correlati