.dsy:it. Pages (4): [1] 2 3 4 »
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Programmazione (http://www.dsy.it/forum/forumdisplay.php?forumid=259)
-- [JAVA] Aiuti (http://www.dsy.it/forum/showthread.php?threadid=14494)


Posted by karmo on 26-10-2004 09:02:

java

ciao ragazzi!
volevo un piccolo aiuto!
sto programmando in java e non riesco a capire il significato delle variabili STATIC e delle variabili FINAL
da quanto ho capito si usa Final per le variabili che non possono essere modificate nel codice sorgente!è cosi!?
spero qualcuno possa aiutarmi!
bye

__________________
"ki ha scritto queste stronzate!!??" disse il cieco toccando una grattugia!


Posted by 0m4r on 26-10-2004 09:29:

con final dichiari le costanti, cioè, una volta che assegni un valore ad una di queste "variabili", questo non può essere più cambiato.
Ad esempio

code:
final int PIPPO = 100;

rappresenta dichiarazione e assegnamento di una costante (che di solito sono rappresentate scrivendole tutte in maiuscolo) al valore 100. Quindi, poer quanto detto prima, se tu provassi a fare
code:
final int PIPPO = 100; PIPPO = 150;

otterresti un errore in compilazione che ti ricorderebbe che la costante PIPPO è gia stata assegnata (o qualche cosa del genere).

con static invece si "identificano" le variabili che non riguardano un oggetto di una classe ma proprio la classe stessa.

__________________
http://www.twitter.com/0m4r


Posted by Lord_Tom on 26-10-2004 10:33:

static è usato per condividere la stessa risorsa da più oggetti.
Pensa ad esempio ad una variabile che tiene in memoria i riferimenti ad un database:

...
class DataRetriever
{
...
private static MyDataBase myDataBase ;
...
}

la istanzi una volta e poi tutti gli oggetti la usano


Posted by karmo on 26-10-2004 10:34:

mmm scusa potresti spoiegare meglio il significato di static?
non l'ho capito molto bene...
grazie!:)

__________________
"ki ha scritto queste stronzate!!??" disse il cieco toccando una grattugia!


Posted by karmo on 26-10-2004 10:36:

scusa ma se voglio che una variabile venga utilizzata da tutta la classe...non basta metterla fuori dalle parentesi di un suo oggetto o di un suo metodo?

__________________
"ki ha scritto queste stronzate!!??" disse il cieco toccando una grattugia!


Posted by Jacoposki on 26-10-2004 12:19:

ma static non erano mica i metodi eseguiti direttamente da una classe invece che da un oggetto?

una risorsa condivisa non è mica una public?

o mi sto incasinando?? ^^

__________________
Mai sottovalutare l'ampiezza di banda di una station wagon piena di nastri lanciata a tutta velocità lungo l'autostrada. - Andrew S. Tanenbaum - Reti di Calcolatori


Posted by Simeon on 26-10-2004 12:24:

Static come diceva qualcuno sono i metodi che si eseguono su una classe anziche' su un oggetto, per esempio

code:
double x = Math.cos(x)


Il metodo cos non puo' essere eseguito su x ( che e' una variabile di tipo primitivo double, non un oggetto ); infatti viene applicato alla CLASSE Math.

Il risultato viene quindi assegnato alla variabile x.

DISCLAIMER : Questo e' tutto quello che so dalla lezione di ieri (25/10), per cui se qualcosa e' incorretto o impreciso mi tutelo :asd:


Posted by Lord_Tom on 26-10-2004 13:05:

Originally posted by karmo
scusa ma se voglio che una variabile venga utilizzata da tutta la classe...non basta metterla fuori dalle parentesi di un suo oggetto o di un suo metodo?


Non capisco l'osservazione...che significa una variabile usata da una classe ? ??

cmq nel mio precedente post volevo indicare l'uso più frequente e sensato di "static". Si usa static quando si vuole condividere un "qualcosa" tra più oggetti.

Un caso d'uso è una risorsa. Con risorsa intendo una variabile, una costante, un riferimento ad un' altra classe, un riferimento ad un file etc...


Posted by nous on 26-10-2004 13:54:

In effetti ha ragione il Lord. Gli attributi statici sono attributi di classe, non di istanza. Questo vuol dire che sono condivisi dagli oggetti che sono istanza di una classe (essendo la classe definita come l'insieme degli oggetti che ne sono istanza) ma non sono da loro modificabile.
Sono modificabili (nel caso in cui la visibilità lo permetta) prima di istanziare un oggetto che li utilizzerà, la modifica ovviamente si ripercuoterà su tutti gli oggetti istanza della classe.
A livello di allocazione di memoria ho una sola allocazione per l'attributo, invece di averne tante quanti gli oggetti che istanzio.
I metodi statici sono utilissimi nelle classe di utilità, nei singleton, nei costruttori statici.

__________________
Cristian,il Nous che invoglia ^_^

"La capa è troppo in la,e la sbarba è troppo giovane..mi sa che qua si va in bianco"
Ryo Saeba (City Hunter)


Posted by Lord_Tom on 26-10-2004 13:59:

Originally posted by nous
Questo vuol dire che sono condivisi dagli oggetti che sono istanza di una classe ma non sono da loro modificabile.


Questo non è vero. Anzi, ogni oggetto può modificare un attributo statico...
Ovviamente questa è causa dei buchi più difficili da individuare.

Un esempio sono le race condition.
Un thread accede al campo statico "number" e lo imposta a 5.
Un altro thread lo imposta a 7.
Il primo prosegue l'esecuzione, pensando sia 5 mentre invece è 7...

Insomma, è importante non abusare dei metodi static ! !

Cmq nous ha evidenziato il secondo grande impiego di static: le classi di utilità !


Posted by holylaw on 26-10-2004 18:17:

cmq vorrei precisare, onde evitare confusione, che esistono sia le variabili static (definiti da Lord_Tom e da nous) sia i metodi static (definiti da Simeon), che sono 2 cose distinte

__________________
La mia epoca ed io non siamo fatti l'uno per l'altro:questo è chiaro. Ma è da vedere chi di noi due vincerà il processo di fronte al tribunale dei posteri.
AV MJØDEN VART DU VIS OG KLOK, SÅ DREKKA MER!!!!
Le persone sagge parlano perché hanno qualcosa da dire.
Le persone sciocche perché hanno da dire qualcosa.


Posted by Lord_Tom on 26-10-2004 18:55:

Originally posted by holylaw
cmq vorrei precisare, onde evitare confusione, che esistono sia le variabili static (definiti da Lord_Tom e da nous) sia i metodi static (definiti da Simeon), che sono 2 cose distinte


No, il concetto di static è lo stesso.
Ovviamente si applica a contesti diversi.
E' un po' come dire che un coltello può servire sia come arma bianca sia per tagliare il cibo !

Cmq sono distinzioni un po' inutili...


Posted by andreamoz on 02-11-2004 15:48:

Vediamo se mi spiego:

come ben sapete (vero?) quando chiamate un costruttore di una classe create una nuova istanza di quella classe, cioè un nuovo oggetto. Pensate alla classe come allo "stampino" e all'oggetto come al biscotto (i puristi mi perdonino la semplificazione, che non è neanche corretta fino in fondo, ma è solo per chiarire il concetto...).

Quando avete istanziato un oggetto potete chiamarne i metodi, leggerne o modificarne, ove permesso, i membri, etc.

Ogni oggetto ha i membri definiti dalla classe, ciascuno con i propri valori che variano da oggetto a oggetto. (es classe Persona, oggetti Piero età 25, Luigi età 32, Mario età 13, etc)
Finchè non ho un Piero (o in generale un'istanza di Persona) non posso avere un attributo età, nè di valore 25 nè di nessun altro valore, null compreso.
La variabile età è una variabile di istanza, cioè ha senso solo se abbiamo un'istanza (es. Piero) della classe (Persona).

Pensate invece che alle persone alle automobili: ciascuna automobile ha il proprio numero di telaio, che tendenzialmente è il successivo della macchina costruita precedentemente (la mia povera prof di italiano!). Ora, in ogni istanza (in ogni automobile costruita) io metto una targhetta con il numero di telaio, ma non so quale sarà il numero della prossima automobile costruita. Non ha infatti senso che la singola automobile sappia qualcosa degli altri numeri di telaio.

Questo numero è un attributo di classe, cioè viene usato dalla classe Automobile quando istanzia (attraverso un costruttore) un nuovo oggetto automobile. In Java tale attributo viene identificato con la parola chiave static, che significa appunto che esiste anche senza che esistano istanze di Automobile.

Se a static aggiungiamo final otteniamo una bella costante da utilizzare in lungo e in largo (es banale il fattore di conversione lira/euro).

La stessa cosa, anche se ci sono alcune sottili differenze, vale per i metodi statici. Parlo di differenze perché in realtà i metodi di una classe (statici e non) vengono caricati una sola volta in memoria, e non una volta per istanza (sono uguali per tutti gli oggetti della classe!).

I metodi statici operano tipicamente non su istanze specifiche della classe (ad esempio sull'automobile di telaio 123456) ma sulla classe in genere (ad esempio il costruttore userà un metodo statico per sapere quale sarà il numero di telaio della prossima automobile e ad aggiornare l'attributo statico).

Se pensate, come altro esempio, ai metodi statici della classe Math potete notare che operano non su istanze della classe Math stessa, ma su numeri (int, double, etc).

Se non sono stato chiaro martellatemi pure. Se sono stato chiaro accetto donazioni... :D

__________________
D'OH!


Posted by loly on 10-11-2004 11:09:

Unhappy aiuto per java

Buon giorno sono una studentessa di informatica triennale Seguo il corso di programmazione di pighizzini e dopo aver istallato (come da istruzioni di Pighizzini) java
sul mio pc(windows xp)non riesco a compilare nessun programmino.
Il messaggio che mi da il compilatore è:

C:\>j2sdk1.4.1_02/bin/javac prova.java
error cannot read prova.java
1 error

Rimango in attesa di aiuto

Salutoni
Loly


Posted by tandrea85 on 10-11-2004 11:13:

hai scritto questa riga di comando C:\>j2sdk1.4.1_02/bin/javac prova.java? se è cosi il tuo file prova.java deve essere nella directory C:\>j2sdk1.4.1_02/bin


All times are GMT. The time now is 17:07. Pages (4): [1] 2 3 4 »
Show all 56 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.