Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    160

    [JAVA] Differenza tra var locale e globale (esercizio che non funziona.....)

    Sto cercando di costruirmi un esempio che mi chiarisca la differenza tra var globale e locale (per capire la differenza sto usando lo stesso nome).
    Dall'interno del metodo stampa() non dovrebbe essere ancora possibile accedere alla variabile globale 'Var', ricorrendo alla parola riservata "this"?
    Ottengo però un'errore di sintassi sulla linea di codice che contiene System.out.println(this.Var);
    Grazie a tutti

    ---
    public class test
    {
    static int Var=10;
    static void stampa()
    {
    int Var =99;
    System.out.println(Var);
    System.out.println(this.Var);
    }

    public static void main(String args[])
    {
    stampa();
    }
    }
    ---

  2. #2
    Utente di HTML.it L'avatar di Zalex
    Registrato dal
    Aug 2001
    Messaggi
    357
    In Java non esistono le variabili globali!!
    Var non e' una var globale, ma un campo dati statico della classe test!!

    le variabili globali(del C++ per esempio) sono variabili dichiarate al di fuori di ogni funzione e di ogni classe e sono visibili a tutti!!!In Java non e' possibile dichiarare variabili al di fuori di una classe!!!

    ti da errore xke' non hai capito che significa static

    un metodo o on campo dati statico non ha oggetto di invocazione!!!!!!!
    ma vengono richiamati col nome della classe!!!quindi non puoi usare this all'interno di stampa!!!

  3. #3
    Utente di HTML.it L'avatar di Zalex
    Registrato dal
    Aug 2001
    Messaggi
    357

    Re: [JAVA] Differenza tra var locale e globale (esercizio che non funziona.....)

    Originariamente inviato da Van Basten
    Dall'interno del metodo stampa() non dovrebbe essere ancora possibile accedere alla variabile globale 'Var', ricorrendo alla parola riservata "this"?
    che significa?
    tutti i metodi di una classe hanno accesso ai campi dati di quella classe!!

  4. #4

    Re: Re: [JAVA] Differenza tra var locale e globale (esercizio che non funziona.....)

    Originariamente inviato da Zalex
    che significa?
    tutti i metodi di una classe hanno accesso ai campi dati di quella classe!!
    mi sa che nn sa come funzia l'incapsulamento
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    160
    Ti riporto integralmente il capitolo di un tutorial tratto da mokabyte.com (pensavo più che affidabile!) proprio dedicato alla differenza tra var globale e locale.
    Ma quindi è sbagliato e fuorviante?
    ---
    VARIABILI GLOBALI
    Una variabile globale è una variabile definita al di fuori di un metodo, in modo tale che risulti visibile a tutti i metodi del programma. La sintassi generale di una variabile globale è:

    static tipo nomeVariabile;

    Si noti di nuovo l'uso della parola "static", il cui ruolo verrà spiegato in dettaglio più avanti: per il resto si tratta di una normale dichiarazione di variabile. Anche in questo caso è possibile dichiarare variabili inizializzate:

    static tipo nomeVariabile = valoreIniziale;

    in questo caso la variabile viene inizializzata con il valore iniziale quando il programma viene eseguito. Pertanto è possibile riproporre una variazione sul programma precedente che mostri l'uso di una variabile globale:

    public class Esempio2 {

    static int a = 10;

    static void metodo1() {
    System.out.println(a);
    }
    static void metodo2() {
    a = a++;
    System.out.println(a);
    }
    }

    Cosa succede quando all'interno di un metodo si dichiara una variabile locale con lo stesso nome di una variabile globale? Accade che, all'interno del metodo, la variabile locale ha precedenza di accesso rispetto a quella globale, che comunque mantiene inalterato il suo valore. Si osservi un frammento di codice come il seguente:

    public class Esempio3 {

    static int a = 10;

    static void metodo1() {
    System.out.println(a);
    }

    static void metodo2() {
    int a = 11; // questa a e' DIVERSA dalla a globale
    System.out.println(a);
    }
    }

    In questo caso abbiamo una variabile globale di nome a, che viene utilizzata all'interno del metodo1. Nel metodo2, viene dichiarata una nuova variabile a, visibile solo all'interno del metodo, che tuttavia non sovrascrive la sua omonima globale. Dall'interno del metodo2 e' ancora possibile accedere alla variabile globale a, ricorrendo alla parola riservata "this". Vediamo un esempio:

    public class Esempio4 {

    static int a = 10;

    static void metodo2() {
    int a = 11; // questa variabile a e' DIVERSA dalla a globale
    System.out.println(a); // stampa la variabile locale
    System.out.println(this.a); // stampa la variabile globale
    }
    }

    Inutile sottolineare che simili situazioni tendono a creare confusione ed ambiguità: il programmatore deve sempre cercare di adottare la soluzione più semplice, ed evitare il più possibile di riutilizzare il nome di una variabile globale in ambito locale.

    Struttura generale di un programma con metodi e variabili globali

    E' giunto il momento di riassumere le nozioni introdotte fino ad ora, e di integrarle con quanto appreso in precedenza. I metodi e le variabili globali vanno definiti all'interno della definizione di classe, sullo stesso livello della sezione main, che, come già detto, è un metodo a sua volta. Possiamo allora estendere la struttura base di un programma Java seguendo questo schema:

    public class NomeProgramma {

    static tipo variabile1;
    static tipo variabile2;
    ...

    static tipo metodo1() {
    istruzione1;
    ...
    istruzioneN;
    return returnVal;
    }

    static tipo metodo2() {
    istruzione1;
    ...
    istruzioneN;
    return returnVal;
    }
    ...


    public static void main(String argv[]) {
    }

    }

    Un dettaglio importante per chi ha una certa esperienza del linguaggio Pascal: contrariamente a quest'ultimo, Java non permette di dichiarare metodi all'interno di altri metodi, ossia metodi nidificati.
    ---

    ti da errore xke' non hai capito che significa static
    In effetti sto studiando da pochissimo Java...
    Mi potresti definire con chiarezza il significato dei modificatori 'static' e 'public'?
    Grazie

  6. #6
    Utente di HTML.it L'avatar di Zalex
    Registrato dal
    Aug 2001
    Messaggi
    357
    OH porca miseria!!!!!!!!!!!!!!!!!
    e che razza di tutorial e' mai questo???????

    public class Esempio4 {

    static int a = 10;

    static void metodo2() {
    int a = 11; // questa variabile a e' DIVERSA dalla a globale
    System.out.println(a); // stampa la variabile locale
    System.out.println(this.a); // stampa la variabile globale
    }
    }
    non compilera' mai!!!!!

    allora...prima di iniziare, sai qualche cosuccia su cos'e' un linguaggio a oggetti?

  7. #7
    Utente di HTML.it L'avatar di Umbe78
    Registrato dal
    May 2001
    Messaggi
    90
    Non direi che quel tutorial è totalmente sbagliato, solo l'esempio n° 4 è errato, per quanto riguarda la definizione di variabile globale non ci vedo niente di strano.

    ciao

    Umbe

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    160
    ... proprio le basi (ma mi sto impegnando!!). Compilo ed eseguo alcuni esercizi base ma, nella maggior parte dei casi, in alcuni di questi esempi alcune righe vengono spesso date 'per buone'. Ad esempio, come detto in precedenza, non ancora chiaro il significato dei modif 'static' e 'public'.

    Non direi che quel tutorial è totalmente sbagliato, solo l'esempio n° 4 è errato, per quanto riguarda la definizione di variabile globale non ci vedo niente di strano.
    quindi non è proprio da buttare?

  9. #9
    Utente di HTML.it L'avatar di Umbe78
    Registrato dal
    May 2001
    Messaggi
    90
    come ti dicevo prima in java si intendono come variabili globali le variabili di classe visibili da tutti gli oggetti della classe stessa, giustamente come diceva Zalex non è possibile definire una variabile che non sia contenuta in una classe, la spiegazione delle variabili globali del tutorial di mokabyte è corretta, l'errore dell'esempio 4 è dovuto forse ad una svista, l'errore è dovuto al fatto che la parola riservata "this" non è static e quindi non può essere utilizzata con variabili e metodi definiti static.



    umbe

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    160
    ......mi stavo dimenticando..

    Per Zalex o chiunque sia preparato.
    un metodo o on campo dati statico non ha oggetto di invocazione!!!!!!!
    Potresti spiegarmelo in altre parole? Fai conto di parlare a uno un po' ignorantello...
    Grazie!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.