PDA

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

vladix
14-08-2008, 23:02
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.

71104
15-08-2008, 12:38
-.-

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

WarDuck
15-08-2008, 16:27
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:

vladix
15-08-2008, 17:56
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: )

WarDuck
15-08-2008, 18:06
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

ndakota
15-08-2008, 19:21
"Il Singleton NON ESISTE!!!" - (C) 2007-2008 fek

:p

e cosa si dovrebbe usare in quei casi allora?

dupa
15-08-2008, 19:49
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