Newsgroup: it.comp.java
Titolo: Semi-filosofico: E' giusto un main statico in una applicazione?

Ho sviluppato un'applicazione, con il suo bel metodo "static void main".
L'ho dichiarato statico per il concetto stesso di staticità, in quanto i
metodi statici sono quelli che dovrebbero poter essere eseguiti anche senza
un'istanza della classe (tipo Math.sqrt()) e, la classe in questione, è una
APPLICAZIONE e quindi non viene formalmente istanziata.
Questa scelta, però, mi ha costretto a modificare diversi metodi e campi
come statici (altrimenti non avrei potuto accedervi da un metodo statico
quale il main). Ma tali metodi non hanno senso se non è presente un'istanza
della classe!
Perciò,  a questo punto mi chiedo: la scelta del main static è giusta?
Grazie in anticipo, Bye, Animanera. :)
---
Per le mie ricerche uso SOSPlanet.it
http://www.sosplanet.it
Il motore di ricerca dei motori di ricerca

 
Ciao,
in realta' non e' una scelta, dato che il metodo main deve avere una
signature ben precisa, altrimenti non viene trovato (e invocato) dalla
JVM.
Quindi il main deve essere dichiarato cosi':
public static void main(String[] args)
(ok, sul public si puo' anche discutere, ma e' un vecchio bug)
Se hai bisogno di utilizzare attributi e metodi non statici della classe
in cui si trova il metodo main, devi semplicemente istanziare un oggetto
della classe ed utilizzare quello.
Ad esempio:
public class Prova {
  private int i; // un membro non statico della classe
  public static void main(String[] args) {
    Prova miaProva = new Prova();
    miaProva.i = 10;
    // etc etc...
  }
}
-- 
Lucio Benfante
Brainbench MVP for Java 1
http://www.brainbench.com
MyTranscript: 
http://www.brainbench.com/transcript.jsp?pid=167064

 }
Giusto! In questo modo mi č ancora piů chiaro il perchč dei metodi statici e
non! :)
Grazie mille, Bye, Animanera. :)

 non! :)
Aspetta...ho parlato troppo presto... :[]
Prima nel main effettuavo diverse operazioni (una trentina di linee di
codice) che avevano il solo scopo di richiamare alcuni funzioni. Ma, creando
un nuovo oggetto all'inizio del main, tutte le operazioni sarebbero riferite
a quell'oggetto (e alle funzioni di quell'oggetto) e quindi mi verrebbe da
inserire tutto nel costruttore, lasciando nel main solo la costruzione
dell'oggetto (e la registrazione su un Registry visto che č un oggetto
remoto); le altre operazioni (come il settaggio di un'interfaccia, il
richiamo di alcune funzioni per la lettura di files di configurazione, e lo
sceduling di un task dell'oggetto) andrebbero nel costruttore.
Ma a questo punto mi chiedo, č giusto usare il costruttore in questo modo?
Grazie, Bye, Animanera. :)


 modo? 
Dipende. Il costruttore in genere dovrebbe contenere il minimo 
indispensabile di operazioni per assegnare uno stato iniziale coerente 
all'oggetto. Eventuali altre inizializzazioni e' buona pratica lasciarle ad 
un metodo init() a cui eventualmente passare argomenti eccetera.
-- 
Life's something u don't get out alive..
ObjectZone - 
http://space.tin.it/computer/csadun

 
Sono d'accordo. Nel costruttore ci vanno solo le operazioni di
inizializzazione dell'oggetto che si sta costruendo.
Il resto va delegato ad un metodo init, come suggerisce Cristiano, oppure
(se la situazione e' piu' complessa) interamente ad un altro
oggetto/classe, che si occupa di coordinare l'ambiente di esecuzione.


 un metodo init() a cui eventualmente passare argomenti eccetera.
Ok, però considera che non mio caso realizzo un applicazione e non
un'applet.
In tal caso il nome "init" è un nome come un altro (e quindi va richiamato
dal costruttore), o è un nome specifico, e quindi viene eseguito
direttamente?
Tnx, Bye, Animanera. :)

direttamente?
E' un nome come un altro, ma piuttosto significativo/descrittivo.
Non per niente lo hanno scelto per le applet ;-)
-- 
Ciao
	Fabrizio C.

 eseguito direttamente?
Un nome come un altro, ma significativo :-)
