Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    216

    (Java) Dichiarazioni di Variabili Static

    ho creato 2 classi : 1 "principale", l'altra contenente tutte le funzioni matematiche ( somma, sottrazione, ecc... )

    Non capisco perchè il compilatore mi obbligi a usare variabili static.
    nel caso richiamassi n volte il metodo somma il valore delle variabili h e k deve poter essere impostato a mio piacimento.

    Classe Principale

    static int h = 6;
    static float k= 3.14F;
    ....
    Operazioni sum = new Operazioni();
    sum.r3 = sum.somma(h,k);
    System.out.println(sum.r3);

    Classe secondaria

    public float somma(int a, float b){

    r3 = a+b;
    return (r3);
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: (Java) Dichiarazioni di Variabili Static

    Originariamente inviato da carlojil
    Non capisco perchè il compilatore mi obbligi a usare variabili static.
    Le variabili e i metodi 'static' appartengono alla classe e non alle singole istanze dell'oggetto in cui sono contenute.

    Quindi:
    - dentro un metodo 'static' (in cui non hai il 'this') non puoi usare variabili/metodi non 'static' direttamente. Devi avere come minimo un reference alla istanza dell'oggetto su cui vuoi operare.

    - dentro un metodo ('static' o non 'static') puoi usare variabili/metodi 'static' a patto di farli precedere dal nome della classe (es. NomeClasse.<qualcosa>), che puoi omettere se si trovano nella stessa classe.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    216
    io non ho definito nulla in static, il compilatore mi ha obbligato a farlo per le 2 variabili presenti nella classe principale.
    Questo se ho capito bene, significa che ad ogni istanza dell'oggetto avrò sempre queste 2 variabili ma sempre con il medesimo valore ( come fossero costanti ).

    Io però non voglio settarle come static, cosa dovrei fare quindi ?

    Il programma così com'è va.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non usarle all'interno di contesti statici come il main().
    Quindi crea un'istanza della tua classe all'interno del main e usa quella.


    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

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    216
    non ti seguo.

    nel main ho creato :

    ==============================
    Operazioni sum = new Operazioni();
    sum.r3 = sum.somma(h,k);
    System.out.println(sum.r3);
    ==============================

    oltre alla dichiarazione delle variabili d'istanza h e k ( non static )

    il compilatore mi ha errore e mi obbliga a dichiararle static.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da carlojil
    io non ho definito nulla in static
    Il main() è un metodo static e come ho detto anche sopra, in un contesto 'static' non puoi usare variabili/metodi di "istanza" senza fare un riferimento esplicito ad una istanza ben precisa.

    Quindi è per quello che le variabili devono essere static.

    Come ti ha suggerito LeleFT, crea una istanza della classe principale e così potrai usare variabili non static.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    il main è dichiarato static, ok? quindi da lì puoi accedere _direttaemente_ solo ad attributi static.
    Se la tua classe si chiama pippo, devi fare:

    pippo p = new pippo();
    ...
    sum.r3 = sum.somma(p.h, p.k);
    Ivan Venuti
    Vuoi scaricare alcuni articoli sulla programmazione, pubblicati su riviste di informatica? Visita http://ivenuti.altervista.org/articoli.htm. Se vuoi imparare JavaScript leggi il mio libro: http://www.fag.it/scheda.aspx?ID=21754 !

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    216
    ok, ottimo grazie.

    un altra domanda.

    se le variabili h e k le dichiarassi all'intenro del main quindi non di'istanza che differenza ci sarebbe rispotto alla soluzione che mi avete suggerito ?

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da carlojil
    ok, ottimo grazie.

    un altra domanda.

    se le variabili h e k le dichiarassi all'intenro del main quindi non di'istanza che differenza ci sarebbe rispotto alla soluzione che mi avete suggerito ?
    Se le metti e le usi solo nel main, meglio ancora. Diventano locali e non occupano nulla nella classe/istanze.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    cerca di capire cosa ci devi fare delle variabili... se non sono valori temporanei da usare e buttare, mettile pure nel main.
    In pratica negli attributi di una classe ci dovresti mettere SOLO quelle variabili che ti servono per far funzionare gli oggetti istanziati dalla classe: non per nulla esse vanno a comporre lo STATO diell'oggetto. Quindi qualcosa per cui è essenziale "portarsi dietro".

    Altro discorso sulla visibilità: quasi mai gli attributo sono pubblici. Se hai bisogno di leggerli/scriverli dall'esterno li esponi con dei metodi (fai una ricerca del termine JavaBean e ti chiarisci il concetto).

    In ogni modo sei ancora "lontano" dal modo di pensare OO. Leggiti un buon libro sull'argomento (potresti anche partire dall'ottimo "Thinking in Java": http://mindview.net/Books/TIJ4

    p.s. delle versioni precedenti hai a disposizione l'intero libro scaricabile gratuitamente (e tradotto in italiano)
    Ivan Venuti
    Vuoi scaricare alcuni articoli sulla programmazione, pubblicati su riviste di informatica? Visita http://ivenuti.altervista.org/articoli.htm. Se vuoi imparare JavaScript leggi il mio libro: http://www.fag.it/scheda.aspx?ID=21754 !

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.