Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Dubbio membri statici

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    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.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #2
    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"?

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    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.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    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?

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    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.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.