Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    11

    Istanza di una classe e utilizzo dell'oggetto creato

    Ciao,
    penso di essermi perso in alcuni argomenti di java che secondo alcuni non hanno niente di complicato, ad esempio che differenza concettuale c'è tra i due codici sotto riportati:

    public class Reference {
    public void cambiaReference(Data data) {
    data = new Data();
    data.giorno = 26;
    data.mese = 8;
    data.anno = 1974;
    }
    }

    e

    public class Reference {
    public void cambiaReference(Data data) {
    data.giorno = 26;
    data.mese = 8;
    data.anno = 1974;
    }
    }

    Nel primo c'è l'istanza, nel secondo no.
    Entrambi non danno errori, però io sapevo che i puntatori (oggetti) potevano essere utilizzati dopo essere stati istanziati con il new, invece vedo che nel secondo codice, anche senza istanza, il puntatore "data" riesce a cambiare i valori delle variabili giorno, mese e anno.
    Le variabili suddette erano state create con il seguente codice:

    public class Data {
    public int giorno;
    public int mese;
    public int anno;
    }

    Grazie

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: Istanza di una classe e utilizzo dell'oggetto creato

    Il tag CODE?

    Originariamente inviato da Fede2
    Entrambi non danno errori, però io sapevo che i puntatori (oggetti) potevano essere utilizzati dopo essere stati istanziati con il new, invece vedo che nel secondo codice, anche senza istanza, il puntatore "data" riesce a cambiare i valori delle variabili giorno, mese e anno.
    e
    E se devi usare un oggetto che è già stato creato? Cosa fai, lo crei nuovo ogni volta?

    codice:
    public class Reference {
        public void cambiaReference(Data data) {
            data.giorno = 26;
            data.mese = 8;
            data.anno = 1974;
        }
    }
    cambiaReference riceve una copia di un riferimento ad un oggetto Data già creato e ne cambia lo stato.

    codice:
    public class Reference {
        public void cambiaReference(Data data) {
            data = new Data();
            data.giorno = 26;
            data.mese = 8;
            data.anno = 1974;
        }
    }
    Questo invece ha poco senso: il metodo riceve un oggetto Data ma se ne frega e sostituisce la copia ricevuta con un nuovo oggetto.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    11
    Nel primo esempio dici che l'oggetto "data" di tipo "Data" è gia stato creato: però non vedo dove e quando e stato creato...per creare un oggetto non si dovrebbe fare data = new Data()?, ma questa istruzione non è presente nel primo codice.
    Se non sbaglio:
    - Data data;....dichiara l'oggetto
    - data = new Data() lo crea, ciò inserisce nella memoria predistanata all'oggetto "data" il riferimento che punterà verso la classe Data.

    Puo essere che l'oggetto si crei automaticamente quando il metodo "cambiaReference(Data data)" riceve l'oggetto indicato tra le parentesi?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Fede2
    però non vedo dove e quando e stato creato...
    Sarà chi invoca cambiaReference a dover passare (il riferimento a) un oggetto Data. Che poi il chiamante istanzi lui l'oggetto Data o lo riceva a sua volta ..... poco (anzi nulla) importa a cambiaReference.

    Originariamente inviato da Fede2
    Puo essere che l'oggetto si crei automaticamente quando il metodo "cambiaReference(Data data)" riceve l'oggetto indicato tra le parentesi?
    No ... questa è programmazione, non magia ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    11
    Grazie ad entrambi per le risposte (ho capito in parte...ci sto ragionando).
    Quindi se viene eseguito il seguente codice:

    public class ChiamaReference {
    public static void main(String args[]) {
    Reference ogg = new Reference();
    Data dataDiNascita = new Data();
    dataDiNascita.giorno = 10;
    dataDiNascita.mese = 12;
    ogg.cambiaReference(dataDiNascita);
    dataDiNascita.anno = 1972;
    System.out.println("la mia data di nascita e' " + dataDiNascita.giorno + "-" + dataDiNascita.mese + "-" + dataDiNascita.anno);
    }
    }

    Considerando il primo codice Reference otterrò:
    - la mia data di nascita è 26-8-1974
    Se invece considero il secondo codice Reference otterrò:
    - la mia data di nascita è 10-12-1972

    Nel primo risultato dataDiNascita punta allo stesso indirizzo della variabile data, quindi se uno dei due puntatori cambia lo stato dell'oggetto, anche l'altro ne sentirà l'influenza. OK penso che fin qua sia chairo.
    Ma perchè nel secondo risultato le cose cambiano?

    Perdonate la mia scarse dimestichezza con questo linguaggio e la terminologia usata forse non del tutto corretta, ma come avrete capito sono solo agli inizi.
    Grazie per l'aiuto.

    X Alex87: scusa ma non so proprio come fare con quello che tu chiami tag CODE.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    11
    Ok scusate ho messo il tag CODE.....spero sia più chiaro

    codice:
    public class ChiamaReference {
     public static void main(String args[]) {
     Reference ogg = new Reference();
     Data dataDiNascita = new Data();
     dataDiNascita.giorno = 10;
     dataDiNascita.mese = 12;
     ogg.cambiaReference(dataDiNascita);
     dataDiNascita.anno = 1972;
     System.out.println("la mia data di nascita e' " + dataDiNascita.giorno + "-" + dataDiNascita.mese + "-" + dataDiNascita.anno);
     }
     }

  7. #7
    già non capisco come fai a chiamare
    codice:
     Data dataDiNascita = new Data();
     dataDiNascita.giorno = 10;
    visto che l'oggetta Data non ha un attributo di tipo giorno e quindi mi meraviglio come faccia a funzionarti...
    Capisco sei solo agli inizi...tutti siamo stati agli inizi, ma abbiamo preso dei manuali/libri ed abbiamo imparato, credo anche tu dovresti fare la stessa cosa perché vedo che hai tanta confusione in testa.
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da schumy2000
    già non capisco come fai a chiamare
    codice:
     Data dataDiNascita = new Data();
     dataDiNascita.giorno = 10;
    visto che l'oggetta Data non ha un attributo di tipo giorno e quindi mi meraviglio come faccia a funzionarti...
    codice:
    public class Data {
        public int giorno;
        public int mese;
        public int anno;
    }
    L'ha messa nel primo post
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  9. #9
    Non l'avevo vista...cmq chiamare Data come l'oggetto del package di java.util o di javax.sql non è una scelta felice, io ovviamente mi riferivo a quello...cmq sappiamo bene che non è bello richiamare gli attributi da altre classi ma farsi dei get e set che possano manipolare l'oggetto altrimenti la OOP non ha senso, questa è stato uno dei capisaldi nel corso di programmazione ai miei tempi
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  10. #10
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da schumy2000
    cmq sappiamo bene che non è bello richiamare gli attributi da altre classi ma farsi dei get e set che possano manipolare l'oggetto altrimenti la OOP non ha senso, questa è stato uno dei capisaldi nel corso di programmazione ai miei tempi
    Ovviamente, il mio intervento era solo per segnalare che lui comunque quella classe l'ha fatta..

    Che sia orrenda è un altro paio di maniche
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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.