Newsgroup: it.comp.java
Titolo: Altra domanda

Ringrazio Castagna per l'aiuto che mi ha dato nella precedente news.
Ecco l'altra domanda:
quale dei seguenti modi è preferibile usare per fare riferimento ad una
variabile di classe in questa situazione:
         static int a = 10;
 
         static void metodo() {
                  System.out.println(a); 
                 // oppure
                 System.out.println( nomeclasse.a); 
                 // oppure
                 nomeclasse oggetto = new nomeclasse();
                 System.out.println(oggetto.a);
          }
Io avevo imparato che in Java 1.2 era preferibile il secondo modo, ma nel
libro su Java 2 ( che ho letto allo scopo di aggiornarmi) si usava
solamente il 3 modo sopra scritto. E' così cambiato il linguaggio Java in
due anni?
Anche in quest'altro caso (simile al precedente) il libro faceva:
static int a = 10;
void metodo() {
       System.out.println(a);
}
quando io avevo imparato che riferirsi ad una variabile di classe tramite
l'oggetto è altamente sconsigliato e in questa situazione avrei scritto
nomeclasse.a piuttosto che un this.a con this implicito.    
Grazie dell'attenzione.
 
 

Ma nel caso che tu hai esposto sei anche obbligato a usare this perché il
parametro di nome i nasconde la variabile istanza. 

Ma il vero problema è il perché il compilatore mi permette di fare certe
cose.
static int a;
void metodo() {
       a = 50; //chiamata tramite oggetto corrente con this implicito
}
Fin qua va bene ma:
static int  a;
static void metodo() {
         a = 50; 
}
dovrebbe segnalare errore perché qui tento una chiamata tramite oggetto
corrente e l'uso implicito o esplicito di this all'interno di metodi di
classe è sempre un errore secondo Java 1.2. E' stato per caso cambiato in
Java 2?
Grazie     

 Io avevo imparato che in Java 1.2 era preferibile il secondo modo, ma 
Secondo me hai imparato bene.
Se accetti un consiglio continua cosi`: e` solo una questione di "gusti"
(questo mi sembra ovvio, visto che puoi usare liberamente tutti e tre i
modi!) pero` il secondo modo rende il codice _estremamente_ piu`
leggibile. Il terzo probabilmente e` consigliato perche` l'utilizzo di
variabili "public static" puo` indurre al ritorno di "costanti globali"
che e` MOLTO contro la filosofia OOP, e in questo modo invece ti ricordi
sempre che di oggetti/classi si tratta. Secondo me pero` se devi
accedere solo ad una variabile statica come nell'esempio, il creare
un'istanza apposita e` uno spreco ingiustificato di risorse... se poi
devi farci anche altro, allora e` un altro conto.
-- 
Ciao, Matteo                          !!   La chiesa e' vicina, 
                                      /\   ma la strada e' ghiacciata;
mailto:
matteo.mattia
 (at) 
libero.it
   \/   il bar e' lontano,
ICQ UIN : 42966529                    ¡¡   ma camminero' con prudenza.

 
di nuovo: non e` un errore xche` non c'e` nessun "this" implicito.
Hai un metodo di classe che accede ad una variabile di classe.
Oltretutto nel libro che citi ci dovrebbe esser scritto che questo e`
l'unico tipo di variabile cui un metodo static puo` accedere, perche`
non e` affatto detto che al momento della chiamata di questo metodo tu
abbia un oggetto istanziato per poter accedere a variabili di istanza.
Se fosse come tu dici, dovresti necessariamente avere un'istanza della
classe per modificare una variabile che e` della classe, e non
dell'istanza. Questa cosa non avrebbe molto senso no?
Il this e` un riferimento all'istanza corrente, non puoi applicarlo ai
metodi O ALLE VARIABILI di classe.


Grazie. Questa non la sapevo. 
Cmq non sarebbe più conveniente scrivere:
static int a = 10;
static void metodo() {
         nomeclasse.a = 50;
}