|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
|
[JAVA] Dichiarare un metodo static
Ciao...un piccolo dubbio...quand'è che bisogna dichiarare un metodo come static?
Una variabile la dichiaro static quando deve essere di classe ovvero che non è una variabile che identifica caratteristiche dei singoli oggetti ma una caratteristica di tutta la classe...che ne sò ad esempio ogni volta che creo un nuovo oggetto il costruttore incrementa una variabile di classe "conta" che mi tiene il conto di quanti oggetti sono stati creati.... Ma un metodo quand'è che ho necessità di dichiararlo come static? Grazie Andrea |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
|
I casi/motivi possono essere vari, comunque in genere quando il metodo non agisce su una particolare istanza oppure non hai bisogno di/non vuoi creare un'istanza in/su cui chiamarlo.
Ad esempio, se stai scrivendo una classe di utility (ad esempio un banale contenitore generico di funzioni che operano delle trasformazioni su stringhe), in relazione al tipo di applicativo che scrivi puoi non avere il bisogno di istanziare la classe per chiamarne i metodi; ecco che in quel caso ti può tornare un metodo di tipo static, il cui contenuto è avulso dal contesto della singola istanza della classe.
__________________
Il sole è giallo |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Mar 2008
Messaggi: 401
|
In maniera più pratica, se il metodo do() non è statico (quindi deve usare delle variabili che si inizializzano con il costruttore, ecc.) si usa così:
Codice:
BohClass bc = new BohClass(...); bc.do(); Codice:
BohClass.do(); Codice:
public class BohClass{ pubic static int do(int n){ int x = 3; return x + n; } } Codice:
public class BohClass{ int y = 5; public int do(int n){ int x = 3; return y + x + n; } } |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Un buon esempio di metodi statici li puoi trovare nella classe java.lang.Math.
Quote:
In Java meglio parlare di membri di istanza e membri di classe. In questo caso se un metodo è statico (metodo di classe) non può riferirsi a membri di istanza ma può riferirsi a membri di classe ![]()
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
<rant>
Non sei mai obbligato a dichiare qualcosa 'static'... static ed extends dovrebbero essere eliminati dal linguaggio... </rant>
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Da quale linguaggio? Solo da Java?
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Si si, parlavo solo di java.
![]()
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Non ho però capito perchè elimineresti anche extends...
Come implementi l'ereditarietà?
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
![]() Avrei dovuto essere più specifico e dire che vorrei eliminare extends per le classi e lasciarlo per le interfacce. L'ereditarietà fra classi è causa di problemi spinosi tipo il 'fragile base class problem'. http://www.cas.mcmaster.ca/~emil/publications/fragile/ http://en.wikipedia.org/wiki/Fragile_base_class Item 17: Design and document for inheritance or else prohibit it (questo è un capitolo di Effective Java di Bloch) Personalmente vado via implementando sempre da interfaccia, e il polimorfismo è salvo. Poi oh, è sempre il mio gusto e basta... come sarebbe sempre solo il mio gusto avere i generics anche a runtime, il multiple dispatch (disaccoppiando la classe, che dovrebbe essere solo 'stato', dai metodi, com'è in common lisp, dylan, factor, clojure, e altri), le funzioni come first-class-objects.... e vabbè... avevo messo il tag <rant>, no? ![]()
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Invece sono contento di farti queste domande perchè di solito le tue risposte mi sono di stimolo per apprendere cose nuove o vedere cose non nuove da un nuovo punto di vista. Grazie dei link, in pausa pranzo me li leggo.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12103
|
Quote:
Per quanto riguarda i metodi statici invece hanno anche la loro utilità, come nel caso del Factory pattern o di classi astratte di utility. E il factory, quando non viene abusato, potrebbe anche essere una buona soluzione per determinati problemi. P.S. ecco un divertentissimo esempio (grazie fek ![]() http://discuss.joelonsoftware.com/de...el.3.219431.12 ![]()
__________________
![]() Ultima modifica di ^TiGeRShArK^ : 04-02-2009 alle 11:58. |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
LOL! Quel link me l'ero perso! Troppo spassoso!
![]()
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
![]() |
![]() |
![]() |
#13 |
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
|
doh seconda parte scritta dell'esame (quella su Java fatta oggi)....era tosto...pregate per me che se mi boccia o mi abbassa molto il voto rosico perchè al primo dei due scritti (quello teorico) avevo preso 28...ma su questo sono molto più titubante circa i miei risultati...più che altro spero riesa anche a capire la mia scrittura che è tra il cuneiforme ed il gereoglifico...
![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:04.