Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698

    [JAVA] I campi 'static'

    Mi sono sempre chiesto quando, dove e per quanto tempo i valori final static dichiarati nelle classi vivano.

    Mi sono accorto oggi per la prima volta nella mia vita di una cosa un po strana: ho una classe S che contiene dei campi statici, e due classi A e B che li utilizzano.

    Ora, diciamo che io interrompo completamente l'applicazione, apro il sorgente di S e modifico solo i valori di alcune di quelle costanti.

    Se non ricompilo A e B, queste continueranno a riferirsi ai valori vecchi della classe S.

    Quindi quello che volevo chiedere è, anche per sommi capi, il ciclo di vita di una variabile statica. Quello che mi aspettavo nel mio piccolo era che questi valori venivano in qualche modo allocati nella jvm per la durata di una esecuzione che li referenzia, ma al termine della sessione corrente della jvm questi venissero 'azzerati' e riallocati nuovamente al riavviarsi della jvm stessa.

    Invece pare evidente che vengono anche scritti nel byte code delle classi esterne che vi si riferiscono.

    Pareri autorevoli ( e non )?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Ho effettuato una prova ed ho evidenziato la stessa anomalia: credo proprio che nel bytecode delle classi che usano i campi statici vengano inseriti i valori dei campi. Bisognerebbe farlo presente a Sun.


    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 netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Originariamente inviato da LeleFT
    Ho effettuato una prova ed ho evidenziato la stessa anomalia: credo proprio che nel bytecode delle classi che usano i campi statici vengano inseriti i valori dei campi. Bisognerebbe farlo presente a Sun.


    Ciao.
    La sun lo sa, infatti in Java 5 sono state aggiunge le enum e valori per le costanti, ora potresti usare(con Java 5) un codice tipo:

    codice:
    public enum Enumerazione {
    COSTANTE(1000), COSTANTE2(1002);
    private final int value;
    
    private Enumerazione(int value) {
    this.value = value;
    }
    
    public int value() {
    return value;
    }
    
    }
    e chiamare con:

    codice:
    ...
    Enumerazione e = Enumerazione.COSTANTE;
    ...
    e prenderne il valore col metodo value, ecco un esempio:

    codice:
    System.out.println(e + " " + e.value());
    N.B se stampi il nome dell'enumerazione viene scritto il suo nome
    da costante, qui verrà come output:
    COSTANTE 1000


    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Mah... è una cosa piuttosto brutta che non si riesce ad inquadrare proprio nella programmazione Object Oriented... rimane il fatto che le applicazioni già esistenti soffrono del problema evidenziato.


    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

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.