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

Discussione: significato di this

  1. #1

    significato di this

    Scusate chi mi puo' spiegare in modo semplice l' istruzione this ?
    Ho capito che all'interno di una classe:

    int x1=0;
    public TastieraFinestra(String titolo) {
    this.x1=x1
    }
    la x1 del costruttore la riporta alla dichiarazione della variabile.


    ma in questo caso cosa fa ? la riga incriminata e' questa "pulsanti = new PannelloTasti(this);"

    import java.awt.BorderLayout;
    import java.awt.Font;

    import javax.swing.JFrame;
    import javax.swing.JTextArea;

    public class TastieraFinestra extends JFrame
    {
    JTextArea display;
    PannelloTasti pulsanti;
    boolean resetDisplay = true;

    public TastieraFinestra(String titolo)
    {
    super(titolo);
    display = new JTextArea();
    display.setText("");
    pulsanti = new PannelloTasti(this);
    add(display,BorderLayout.NORTH);
    add(pulsanti,BorderLayout.CENTER);
    display.setEditable(false);
    display.setFont(new Font("SansSerif",Font.PLAIN,22));
    }

    grazie a tutti...Abbiate pazienza

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da antonello2 Visualizza il messaggio
    Scusate chi mi puo' spiegare in modo semplice l' istruzione this ?
    this non è una "istruzione" ... è una "parola chiave".

    All'interno di un contesto "di istanza" (quindi NON static) il this è il riferimento all'oggetto su cui è invocato un metodo oppure l'oggetto in fase di costruzione/inizializzazione.

    Quote Originariamente inviata da antonello2 Visualizza il messaggio
    Ho capito che all'interno di una classe:

    int x1=0;
    public TastieraFinestra(String titolo) {
    this.x1=x1
    }
    la x1 del costruttore la riporta alla dichiarazione della variabile.
    Il this.x1 sulla sinistra è il riferimento alla variabile di istanza. Ma x1 sulla destra da dove proviene?
    Se non c'è una variabile che "nasconde" il x1 di istanza, allora this.x1=x1 non ha senso perché entrambi gli x1 fanno riferimento alla variabile di istanza.

    Quote Originariamente inviata da antonello2 Visualizza il messaggio
    ma in questo caso cosa fa ? la riga incriminata e' questa "pulsanti = new PannelloTasti(this);"
    Passa al costruttore di PannelloTasti il riferimento all'oggetto TastieraFinestra che il costruttore TastieraFinestra(String titolo) sta inizializzando.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    this non è una "istruzione" ... è una "parola chiave".

    All'interno di un contesto "di istanza" (quindi NON static) il this è il riferimento all'oggetto su cui è invocato un metodo oppure l'oggetto in fase di costruzione/inizializzazione.


    Il this.x1 sulla sinistra è il riferimento alla variabile di istanza. Ma x1 sulla destra da dove proviene?
    Se non c'è una variabile che "nasconde" il x1 di istanza, allora this.x1=x1 non ha senso perché entrambi gli x1 fanno riferimento alla variabile di istanza.


    Passa al costruttore di PannelloTasti il riferimento all'oggetto TastieraFinestra che il costruttore TastieraFinestra(String titolo) sta inizializzando.
    Scusa ma non ho capito niente di questo..
    Passa al costruttore di PannelloTasti il riferimento all'oggetto TastieraFinestra che il costruttore TastieraFinestra(String titolo) sta inizializzando.[/QUOTE]

    mi puoi fare un esempio

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da antonello2 Visualizza il messaggio
    Scusa ma non ho capito niente di questo..
    codice:
    public class A {
        public A() {
            // qui puoi usare this
        }
    }

    Se fai:

    A a1 = new A();

    stai costruendo un oggetto di tipo A. Viene istanziato l'oggetto (allocata della memoria), viene eseguito il costruttore A() e alla fine viene assegnato il riferimento dell'oggetto alla variabile a1.
    Bene questo riferimento, quello assegnato cioè ad a1 è lo STESSO riferimento che puoi avere già nel costruttore usando il this.

    Il this è il riferimento all'oggetto che è stato istanziato, che il costruttore inizializzerà (con eventuali operazioni varie) e che verrà assegnato ad a1.

    ------------

    E per completare il discorso con il this, nei metodi:

    codice:
    public class Prova {
        private int v1 = 123;
    
        public void prova1() {
            System.out.println(v1);
            System.out.println(this.v1);
        }
    
        public void prova2(int v1) {
            System.out.println(v1);
            System.out.println(this.v1);
        }
    
    
        public static void main(String[] args) {
            Prova p = new Prova();
            p.prova1();
            p.prova2(456);
        }
    }

    In prova1() l'unica variabile "in scope" (cioè nell'ambito di visibilità di prova1) è la variabile di istanza v1. Quindi fare riferimento a v1 oppure this.v1 è la stessa cosa, in quanto il this può essere implicito.

    In prova2() il parametro v1 "nasconde" la variabile di istanza che ha lo stesso nome. Quindi all'interno di prova2, usare solo v1 fa riferimento al parametro e se vuoi accedere alla variabile di istanza nascosta, allora devi usare this.v1

    Ora è più chiaro?
    Ultima modifica di andbin; 23-03-2018 a 12:02
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Scusami ma saro' un po' "Timido" con le variabili ho capito perfettamente ..ma sul costruttore ancora non capisco..Abbi pazienza

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da antonello2 Visualizza il messaggio
    Scusami ma saro' un po' "Timido" con le variabili ho capito perfettamente ..ma sul costruttore ancora non capisco..Abbi pazienza
    Ti è chiaro che facendo:

    A a1 = new A();

    alla fine di tutto viene assegnato alla variabile a1 il riferimento ad un oggetto di tipo A ?

    Bene, il this all'interno del costruttore ha lo stesso identico valore di quel riferimento assegnato ad a1.


    P.S. ho editato il post precedente con altro esempio, leggi bene se hai risposto prima.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    Grazie mille sei molto gentile e paziente...
    visto che sei online ti chiedevo un altra cosa se non e' disturbo..
    nel Main ho il flusso del programma, poi ho un classe dove ho l'nterfaccia swing. come faccio dal main a fermare il flusso sino a che le info inserite nell'interfaccia siano state verificate (sempre nel main), come ad esempio se la password e' giusta ?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da antonello2 Visualizza il messaggio
    nel Main ho il flusso del programma, poi ho un classe dove ho l'nterfaccia swing. come faccio dal main a fermare il flusso sino a che le info inserite nell'interfaccia siano state verificate (sempre nel main), come ad esempio se la password e' giusta ?
    E nel main viene fatto input/output su standard-input/output (in una console, tipicamente) oppure no?
    Comunque se vuoi saperlo, non è una buona separazione, così.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  9. #9
    Nella JText prendo la user e password
    nel main apro un file verifico le user e password digitate nel JText dopodiche eseguo altre istruzioni...

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da antonello2 Visualizza il messaggio
    Nella JText prendo la user e password
    nel main apro un file verifico le user e password digitate nel JText dopodiche eseguo altre istruzioni...
    Ti ripeto che un approccio del genere: un main che fa della logica abbastanza lunga e in uno o più punti "aspetta" qualcosa dalla interfaccia grafica non è in generale un buon approccio.

    Se le richieste verso l'utente tramite UI grafica sono sporadiche, ovvero solo in certi punti vuoi aprire una finestra, chiedere qualcosa, poi si chiude e continui le elaborazioni senza alcuna UI, allora si può anche fare ma a patto di eseguire le elaborazioni nel contesto del Event Dispatch Thread e poi aprire quando serve delle dialog "modali".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java 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 © 2024 vBulletin Solutions, Inc. All rights reserved.