View Full Version : [java] quando dichiarare un metodo "static"
skrælingar
14-08-2008, 22:29
c'e' qualcuno che mi potrebbe spiegare in modo molto semplice quando un metodo va dichiarato static?
wingman87
14-08-2008, 22:41
Per dirla nel modo più semplice io direi quando non fa uso della parola chiave this (neanche implicitamente naturalmente). Dalle implicazioni di ciò dovresti capire anche a cosa serve
un metodo static puo essere utilizzato in modo indipendente , senza riferimento a una istanza specifica , infatti e possibile accedere a un metodo static prima che venga creato qualsiasi oggetto della sua classe e senza riferimento ad alcun oggetto , e possibile dichiarare static anche le variabili , che in sostanza sono variabili globali ...
inoltre i metodi static possono chiamare solo altri metodi statici , ( e nn possono fare riferimento a this o a super )
quoto veej e aggiungo che i metodi statici di solito sono metodi di "utilità"
franksisca
15-08-2008, 11:05
Per dirla nel modo più semplice io direi quando non fa uso della parola chiave this (neanche implicitamente naturalmente). Dalle implicazioni di ciò dovresti capire anche a cosa serve
-.-
non capisco
un metodo static puo essere utilizzato in modo indipendente , senza riferimento a una istanza specifica , infatti e possibile accedere a un metodo static prima che venga creato qualsiasi oggetto della sua classe e senza riferimento ad alcun oggetto , e possibile dichiarare static anche le variabili , che in sostanza sono variabili globali ...
inoltre i metodi static possono chiamare solo altri metodi statici , ( e nn possono fare riferimento a this o a super )
quoto veej e aggiungo che i metodi statici di solito sono metodi di "utilità"
leggesi classe Math.
-.-
non capisco che c'entri tu? :mbe:
sgamato il fake? :D
franksisca
15-08-2008, 14:49
che c'entri tu? :mbe:
sgamato il fake? :D
c'entro....con un buon lubrificante c'entro..... :P
volevo solo fare un esempio che magari è sotto gli occhi.....tipo, oltre alla classe Math anche la classe System
Semplicemente quando non hai bisogno che un determinato metodo debba essere eseguito su un oggetto in particolare. Ti faccio un esempio:
Mettiamo che tu voglia creare una classe Amministratore, e per diversi motivi vuoi che si debba creare una sola istanza di Amministratore (cioè un solo amministratore).
Come fai?
public class Amministratore {
private static Amministratore admin;
private String nome;
private Amministratore(String nome) {
this.nome = nome;
}
public static Amministratore creaAmministratore(String nome) {
if (admin!=null) {
System.out.println("Attenzione amministratore già creato!");
return admin;
}
System.out.println("Creo un nuovo amministratore col nome: "+nome);
admin = new Amministratore(nome);
return admin;
}
public String getNome() {
return nome;
}
...
}
In sostanza puoi notare che gli attributi static e i metodi static vengono creati PRIMA che venga creato ogni oggetto della classe Amministratore.
Notare anche che il costruttore è privato quindi non puoi creare direttamente oggetti col classico new Amministratore(nome) ma devi invocare il metodo STATICO creaAmministratore(String nome).
Se chiamo Amministratore amm = Amministratore.creaAmministratore("Io") ->
La prima volta l'output sarà:
Creo un nuovo amministratore col nome: Io
Se lo chiami un'altra volta l'output sarà:
Attenzione amministratore già creato!
E ti verrà restituito l'amministratore corrente.
Variabili e metodi Static esistono prima di ogni istanza dell'oggetto.
cdimauro
15-08-2008, 16:39
static si usa anche per implementare questo: http://en.wikipedia.org/wiki/Singleton_pattern
Ma sto già sentendo tuoni e fulmini che partono da Guilford in direzione Catania. :asd:
static si usa anche per implementare questo: http://en.wikipedia.org/wiki/Singleton_pattern
singleton pattern ... e essattamente quello che war duck ci ha mostrato ... :fagiano: ( beh la sua implementazione non e delle migliori :asd: )
singleton pattern ... e essattamente quello che war duck ci ha mostrato ... :fagiano: ( beh la sua implementazione non e delle migliori :asd: )
Oddio in effetti è orrenda, ora la modifico :eek:
Edit: fatto ora è più umana forse.
cdimauro
15-08-2008, 18:24
Oops. Scusate, non me n'ero reso conto (si vede che debbo ancora digerire il megapranzo di ferragosto :muro:). :stordita:
cdimauro
15-08-2008, 19:02
"Il Singleton NON ESISTE!!!" - (C) 2007-2008 fek
:p
"Il Singleton NON ESISTE!!!" - (C) 2007-2008 fek
:p
e cosa si dovrebbe usare in quei casi allora?
e cosa si dovrebbe usare in quei casi allora?
non conosco la discussione a riguardo, ma quando si usa Spring, per fare un esempio, è spring che gestisce il fatto che un bean sia prototype o singleton, la classe viene programmata in modo identico, cambia poi come la si usa e la si istanzia tramite spring.
cdimauro
15-08-2008, 20:15
e cosa si dovrebbe usare in quei casi allora?
Dipende dal tipo di problema.
Ma prima ci si dovrebbe chiedere: "ho veramente bisogno di GARANTIRE che una classe venga istanziata soltanto una volta?" ;)
x VeeJ: di niente. :)
wingman87
16-08-2008, 01:26
-.-
non capisco
Magari lui ha capito però :D
Sì, in effetti non è molto chiaro.. lol
DanieleC88
16-08-2008, 07:46
Ma sto già sentendo tuoni e fulmini che partono da Guilford in direzione Catania. :asd:
:rotfl: :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.