Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Dubbio membri statici

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    98

    Dubbio membri statici

    Salve a tutti,
    definendo il membro di una classe come static, nel momento in cui eseguo più volte il metodo dal quale instanzio l'oggetto che utilizza tale membro, mi sto nella pratica riferendo sempre allo stesso membro o esso non è uguale in quanto richiamato da oggetti di vari programmi?

    Spero di essermi spiegato

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Tiime Visualizza il messaggio
    definendo il membro di una classe come static, nel momento in cui eseguo più volte il metodo dal quale instanzio l'oggetto che utilizza tale membro, mi sto nella pratica riferendo sempre allo stesso membro o esso non è uguale in quanto richiamato da oggetti di vari programmi?
    Un membro static "appartiene" alla classe, non distintamente a ciascun oggetto di quella classe. Quindi un membro static è "unico", ce n'è solamente UNO.


    P.S.
    Per essere completamente accurati, bisognerebbe fare una precisazione un po "pignola" ma non vorrei confonderti di più le idee. La definizione di una classe è unica ma ... per classloader. Il classloader è l'entità che materialmente "carica" una classe e la rende disponibile alla JVM. Quindi se una classe X ha un static int z; e questa classe fosse caricata da due classloader distinti, in effetti ci sarebbero due definizioni di X distinte, ciascuna con il suo campo statico z.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    98
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Un membro static "appartiene" alla classe, non distintamente a ciascun oggetto di quella classe. Quindi un membro static è "unico", ce n'è solamente UNO.


    P.S.
    Per essere completamente accurati, bisognerebbe fare una precisazione un po "pignola" ma non vorrei confonderti di più le idee. La definizione di una classe è unica ma ... per classloader. Il classloader è l'entità che materialmente "carica" una classe e la rende disponibile alla JVM. Quindi se una classe X ha un static int z; e questa classe fosse caricata da due classloader distinti, in effetti ci sarebbero due definizioni di X distinte, ciascuna con il suo campo statico z.
    Quindi in una situazione del genere
    codice:
    public class Prova
    {
        static int prova;
    
        public static void esempio
        {
             if ( prova == valoreDefault )
                 prova = generaNumeroIntero();
             else stampa("Ciao");
        }
    }
    se io andassi ad instanziare oggetti Prova anche in programmi del tutto sconnessi tra loro, soltanto il primo che richiama il metodo esempio assegna il valore alla variabile prova, mentre tutti gli altri stampano "Ciao"?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Tiime Visualizza il messaggio
    anche in programmi del tutto sconnessi tra loro
    Che intendi con "sconnessi tra loro" ?? Esecuzioni distinte della JVM? Ogni istanza della JVM è e gira a sé stante. Non c'è alcuna implicazione o connessione particolare tra più istanze della JVM.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    98
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Che intendi con "sconnessi tra loro" ?? Esecuzioni distinte della JVM? Ogni istanza della JVM è e gira a sé stante. Non c'è alcuna implicazione o connessione particolare tra più istanze della JVM.
    Ipotizza che io esegua più volte, tramite istante diverse, lo stesso file jar: ognuno di essi avrà valori diversi anche nei campi statici?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Tiime Visualizza il messaggio
    Ipotizza che io esegua più volte, tramite istante diverse, lo stesso file jar: ognuno di essi avrà valori diversi anche nei campi statici?
    Lo ripeto: due o più istanze della JVM sono completamente distinte riguardo le classi che caricano e i loro campi static, ecc... Non c'è alcuna condivisione o connessione in questo senso.

    Se nel app.jar c'è una classe X con un campo static int z, allora OGNI esecuzione della JVM per avviare app.jar: ha il SUO spazio di memoria, la SUA definizione caricata in memoria di X, il SUO campo z.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    JVM = Java Virtual Machine. Puoi pensare ad una JVM come se fosse proprio un "computer".
    Istanze diverse della JVM sono, in un certo senso, computer diversi.
    Eseguire più volte lo stesso programma equivale a lanciare più istanze della JVM, quindi, in sostanza, è come se ciascun programma girasse in un computer diverso... non si vedono, non si parlano, non sanno nulla l'uno dell'altro.


    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

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    98
    Vi ringrazio per l'aiuto.
    Si può chiudere

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.