Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315

    dubbio dichiarazione tipo di variabili d'istanza in costruttori

    Non riesco a capire perchè creando una variabile d'istanza e utilizzandola nel costruttore in questo modo
    codice:
    public class Quadrato
    {
        public int lato;
    
        public Quadrato(int l)
        {
            int lato = l;
        }
    ...
    il programma non funziona, o meglio mi restituisce 0 come valore, mentre se nel corpo del costruttore tolgo "int" e quindi scrivo l'istruzione "lato = l;" al posto di "int lato = l;" funziona correttamente.
    Se non erro l'errore viene dal fatto che nei metodi successivi ("perimetro" e "area") il compilatore prende in considerazione non la variabile inizializzata dal costruttore ma quella creata all'inizio che appunto è inizializzata di default a 0 essendo un intero. Io però non capisco perchè definendo il tipo le cose non vadano come dovrebbero.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non stai utilizzando una variabile di istanza. Al contrario, nel costruttore stai dichiarando una nuova variabile locale che nasconde la variabile di istanza.

    Tieni a mente bene i due concetti: dichiarazione e assegnazione.


    Dichiarazione: la dichiarazione di una variabile consiste nell'indicazione del tipo seguito dall'indicazione del nome

    codice:
    int lato;   // dichiaro una variabile di nome "lato" di tipo "intero"

    Assegnazione: l'assegnazione consiste nell'indicazione di un nome di variabile, seguito dal segno "=" seguito dal valore che si intende assegnare a tale variabile

    codice:
    lato = 5;   // Assegno ad una variabile di nome "lato" il valore intero 5

    I campi di istanza si dichiarano fuori dai metodi, a livello della classe. Quello che hai fatto tu dentro al costruttore è dichiarare e contemporaneamente assegnare una nuova variabile, il cui nome è uguale a quello del campo di istanza. In questo modo, la variabile locale nasconde il campo di istanza (documentati sulle regole di scope). Tale variabile, è, appunto, una variabile locale che nasce nel costruttore e muore alla fine dell'esecuzione dello stesso.

    Quello che avresti dovuto fare tu è questo:


    codice:
    public class Quadrato
    {
        public int lato;
    
        public Quadrato(int l)
        {
            lato = l;   // nota che non ho messo il tipo
        }
        ...
    }

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    @newutente: oltre a quanto già detto correttamente da LeleFT, aggiungo che in genere si evita di "inventare" un nome del parametro (di metodo/costruttore) differente dal nome del campo di istanza. Si usa lo stesso nome e per referenziare il campo si usa il this.

    codice:
    public class Quadrato
    {
        public int lato;
    
        public Quadrato(int lato)
        {
            this.lato = lato;
        }
        ...
    }
    Cerca di farli così gli assegnamenti ai campi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    grazie ad entrambi.
    per quanto riguarda l'operatore this non l'ho ancora affrontato comunque mi è già tutto più chiaro.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.