Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    utilizzare static in una pagina jsp

    Dunque io mi costruisco un programmino java semplice da eseguire dalla console

    import java.net.*;
    public class Noname2
    {
    private static int i = 0;
    public static void main(String [] a)
    {
    Noname2 Cias2= new Noname2();
    String klo="";
    klo=Cias2.Fff();
    System.out.println(klo);

    }
    public String Fff(){
    i++;
    return "ciao "+i;
    }
    }

    che eseguendolo da
    ciao 1

    lo rieseguo e ottengo sempre
    ciao 1


    importando tale classe in una pagina jsp e eseguendo

    Noname2 Cias2= new Noname2();
    String klo="";
    klo=Cias2.Fff();
    out.println(klo);

    si ottiene

    ciao 1

    si fa il refresh o si rilancia la pagina da un altro browser e
    si ha
    ciao2
    poi
    ciao 3 e cosi via fino a che non spengo tomcat e lo rifaccio partire(e si riparte da 1)

    Come si spiega?E’ come se si stesse eseguendo tutto in un unico programma?
    Come se facendolo girare da console scrivessi:
    public static void main(String [] a)
    {
    Noname2 Cias2= new Noname2();
    String klo="";
    klo=Cias2.Fff();
    System.out.println(klo);

    Noname2 Cias3= new Noname2();
    String klo2="";
    Klo2=Cias3.Fff();
    System.out.println(klo2);

    Ecc.



    }
    ????

  2. #2
    che c'è di strano? Mi sembra giusto.
    Finchè non spegni tomcat un'istanza della classe Noname2 esiste e quindi è logico che se richiami + volte il metodo statico la variabile viene incrementata.
    Nel programma standalone ogni volta che finisce l'esecuzione ll'istanza della classe viene distrutta e quindi naturalmente ogni volta che riesegui il programma la variabile ricomincia da 1

  3. #3
    ok hai ragione, la cosa come la dici tu sembrerebbe filare e il perchè lavevo intuito anche prima ma mi rimane un'idea confusa in testa:

    se in una pagina c'è

    Noname2 Cias2= new Noname2();
    String klo="";
    klo=Cias2.Fff();
    out.println(klo);

    mi sembra che refreshando tale pagina si ricrei da 0 l'istanza Cias2; cioè il comportamento lho capito ma Cias2 non viene ricreata da 0?
    ridichiarare Cias2 è quindi come dichiarare unaltra istanza che usa poi la stessa variabile statica(perchè hai detto che è il metodo statico????)?

  4. #4
    mi sembra che refreshando tale pagina si ricrei da 0 l'istanza Cias2; cioè il comportamento lho capito ma Cias2 non viene ricreata da 0?
    ridichiarare Cias2 è quindi come dichiarare unaltra istanza che usa poi la stessa variabile statica(perchè hai detto che è il metodo statico????)?
    Il codice che hai inserito nella pagina jsp ti crea una nuova istanza istanza dell'oggetto ogni volta che la carichi.
    La variabile static è condivisa da tutti i membri della classe. Ogni volta che crei un'istanza dell'oggetto la variabile viene incrementata.
    Cosa non ti è chiaro?

  5. #5
    è tutto chiaro, mi fa specie il fatto che vengano create due stanze della stessa classe con lo stesso nome, tutto li

  6. #6
    Ricorda che stai lavorando in una web application e esistono i contesti.
    Tu assegni un nome ad una variabile ma non è quella che poi viene realmente usata.
    Prova a guardare la servlet che viene generata per rendertene conto.

  7. #7
    ok appena posso ci guardo.
    vuoi quindi dire che 2 variabili istanziate con nomi uguali sono cmq diverse?

  8. #8
    Sì...
    Altrimenti immagina che casino:
    Due persone si collegano alla stessa pagina. La variabile contiene (ad esempio) i loro dati bancari letti da database. Se la variabile fosse condivisa chi ti assicura che i due utenti leggano i loro dati bancari e non quelli dell'altro?!? O magari un mix dei due?!?

  9. #9
    ok mi è + chiaro

  10. #10

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.