Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Dopo alcuni anni di assenza dai cataloghi dei suoi televisori, Hisense riporta sul mercato una proposta OLED che punta tutto sul rapporto qualità prezzo. Hisense 55A85N è un televisore completo e versatile che riesce a convincere anche senza raggiungere le vette di televisori di altra fascia (e altro prezzo)
Recensione Borderlands 4, tra divertimento e problemi tecnici
Recensione Borderlands 4, tra divertimento e problemi tecnici
Gearbox Software rilancia la saga con Borderlands 4, ora disponibile su PS5, Xbox Series X|S e PC. Tra le novità spiccano nuove abilità di movimento, un pianeta inedito da esplorare e una campagna che lascia al giocatore piena libertà di approccio
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale
NXTPAPER 60 Ultra è il primo smartphone con tecnologia NXTPAPER 4.0 per il display, un ampio IPS da 7,2 pollici. Con finitura anti-riflesso, processore MediaTek Dimensity 7400, fotocamera periscopica e modalità Max Ink per il detox digitale, NXTPAPER 60 Ultra punta a essere il riferimento tra gli smartphone pensati per il benessere degli occhi.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-02-2008, 10:27   #1
Tony Hak
Senior Member
 
L'Avatar di Tony Hak
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 1661
[JAVA] perche' l'output è .... ?

ragazzi .. aiutatemi a capire perche' come output ho MiaData: 30-4-1964 .. magari passaggio per passaggio .. perche' ci sto perdendo la testa.. Le due classi sono :

Codice:
public class Testmiadata {
    public static void main(String[] args) {
        MiaData nascita = new MiaData(23,4,1964);
        MiaData la_settimana_dopo = nascita.addgiorni(7);        
        la_settimana_dopo.print();
    }

}
e ...

Codice:
public class MiaData 
    {
        private int giorno = 1;
        private int mese = 1;
        private int anno = 2006;
    
        public MiaData (int giorno, int mese, int anno)
        {
            this.giorno = giorno;
            this.mese = mese;
            this.anno = anno;
        }

        public MiaData (MiaData data)
        {
            giorno = data.giorno;
            mese = data.mese;
            anno = data.anno;
        }
        
        public MiaData addGiorni (int g)
        {
           MiaData data = new MiaData (this);
           data.giorno = data.giorno + g;
           return data;
        }
        
        public void print()
        {
            System.out.println ("MiaData: "+giorno+"-"+mese+"-"+anno);
        }
}
grazie mille
__________________
Tony Hak è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2008, 10:48   #2
Il.Socio
Bannato
 
L'Avatar di Il.Socio
 
Iscritto dal: Feb 2006
Città: Torino
Messaggi: 93
Quale output ti saresti aspettato di ottenere?
Il.Socio è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2008, 11:05   #3
Tony Hak
Senior Member
 
L'Avatar di Tony Hak
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 1661
no asp .. ora ti spiego ..allora ... questo è un esempio dagli appunti del mio prof .. solo che non capisco come esce questo output... non ho capito bene il procedimento generale..
__________________
Tony Hak è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2008, 11:20   #4
Il.Socio
Bannato
 
L'Avatar di Il.Socio
 
Iscritto dal: Feb 2006
Città: Torino
Messaggi: 93
Il procedimento generale che e' stato seguito e' questo:
- viene creata una istanza di MiaData attribuendogli valore iniziale di 23-4-1964.
- si ottiene una nuova istanza di MiaData aggiungendo 7 giorni alla prima istanza
- si stampa il valore contenuto nella nuova istanza di MiaData (30-4-1964 che altro non e' che il risultato di 23+7)

Ma scommetto che non e' questo che ti interessava sapere...
Il.Socio è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2008, 11:40   #5
feboss
Senior Member
 
L'Avatar di feboss
 
Iscritto dal: Sep 2006
Città: Catania
Messaggi: 742
MiaData nascita = new MiaData(23,4,1964);
crea un oggetto nascita di tipo miaData.quindi va a chiamare la classe e passa come paramentri gg/mm/aa

MiaData la_settimana_dopo = nascita.addgiorni(7);
crea un altro oggetto la_settimana_dopo sempre di tipo MiaData e gli assegna il return di addgiorni(int)

Codice:
public MiaData addGiorni (int g)
        {
           MiaData data = this;
           data.giorno = data.giorno + g;
           return data;
        }
con this si intende la classe che la ha invocata. nascita.addGiorni(7);
quindi nascita
data è la copia di nascita in questo caso

MiaData data = this è uguale a MiaData data = new MiaData (this);
__________________
Voglio sapere di che tessuto deve essere un discorso per non fare neanche una piega
Alternativa ai pacchi di NLITE
MacBook & Canon Ixus 80
feboss è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2008, 12:03   #6
Tony Hak
Senior Member
 
L'Avatar di Tony Hak
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 1661
ok ! tnk's ... ora mi è tutto piu' chiaro .. grazie ancora...
__________________
Tony Hak è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2008, 12:04   #7
Tony Hak
Senior Member
 
L'Avatar di Tony Hak
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 1661
Quote:
Originariamente inviato da Il.Socio Guarda i messaggi
Il procedimento generale che e' stato seguito e' questo:
- viene creata una istanza di MiaData attribuendogli valore iniziale di 23-4-1964.
- si ottiene una nuova istanza di MiaData aggiungendo 7 giorni alla prima istanza
- si stampa il valore contenuto nella nuova istanza di MiaData (30-4-1964 che altro non e' che il risultato di 23+7)

Ma scommetto che non e' questo che ti interessava sapere...
era un po' tutto .. ma soprattutto il this ... cmq ora sto capendo grazie a voi
__________________
Tony Hak è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2008, 12:05   #8
Il.Socio
Bannato
 
L'Avatar di Il.Socio
 
Iscritto dal: Feb 2006
Città: Torino
Messaggi: 93
Quote:
Originariamente inviato da feboss Guarda i messaggi
MiaData data = this è uguale a MiaData data = new MiaData (this);
Credo proprio che tu stia facendo confusione e che stia a tua volta portando confusione nella discussione...
I due costrutti che hai riportato non sono affatto uguali e le implicazioni sono anche notevoli, ti tralascio la spiegazione per evitare inutili divagazioni e ti invito a verificare "sul campo" il codice che hai scritto, ad es. richiamando il nascita.print() per entrambi i casi

P.S. Non ho trovato un modo maggiormente "soft", il post e' da leggere ammorbidendo qua e la dove io non sono riuscito.

Ultima modifica di Il.Socio : 04-02-2008 alle 12:09.
Il.Socio è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2008, 12:17   #9
Tony Hak
Senior Member
 
L'Avatar di Tony Hak
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 1661
quindi ?
__________________
Tony Hak è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2008, 12:26   #10
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Comunque, a beneficio di Tony Hak, "this" è il riferimento implicito all'istanza di classe corrente.

Ad esempio:
Codice:
public class Pippo {

  int anni;
  int occhi;


// costruttore
public Pippo() {
    // di default decido che Pippo ha 10 anni e 2 occhi
    anni = 10;
    occhi = 2;
}


// costruttore con parametro
public Pippo(int anni) {
    // utilizzo this
    this.anni = anni;
   
    occhi = 2; // sempre due occhi. in questo caso posso omettere this
}


// costruttore con tutti i parametri
public Pippo(int anni, int occhi) {
    // utilizzo this
    this.anni = anni;
    this.occhi = occhi;
}

}//end Pippo
Come vedi non sempre serve specificare this...

Nei casi in cui, in un metodo, un parametro preso ingresso vada assegnato ad un attributo della classe e il nome del parametro formale coincida con quello dell'attributo, this va necessariamente utilizzato per poter distinguere il parametro passato al metodo dall'attributo della classe.

Oltre a this esiste un'altro riferimento implicito di classe, "super".

"this" torna un riferimento all'istanza di classe corrente;
"super" torna un riferimento alla classe padre dell'istanza di classe corrente.

Ho messo in grassetto istanza perchè questo è un dettaglio importante: le classi possono contenere, oltre ai metodi di istanza (cioè è necessaria l'esistenza di un oggetto di quella classe per chiamarli, e il metodo è chiamato su quell'oggetto), dei metodi statici: questi sono metodi che non richiedono l'esistenza di un oggetto di classe per essere chiamati, perchè non sono chiamati tramite un'istanza della classe, ma sono metodi della classe stessa e non degli oggetti.

Non essendo necessaria la creazione di un'istanza della classe per l'invocazione di questi metodi, è chiaro che al loro interno non si può utilizzare "this", proprio perchè non esiste alcuna istanza specifica a cui fare riferimento.
Sempre per la medesima ragione, dentro a metodi statici si possono referenziare/chiamare/utilizzare solo attributi statici e metodi statici.

Ultima modifica di banryu79 : 04-02-2008 alle 12:37.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2008, 12:58   #11
Il.Socio
Bannato
 
L'Avatar di Il.Socio
 
Iscritto dal: Feb 2006
Città: Torino
Messaggi: 93
Quote:
Originariamente inviato da Tony Hak Guarda i messaggi
quindi ?
Ammesso che il tuo scopo sia comprendere la logica che c'e' dietro, dovresti cercare di spiegare quali sono i concetti che non ti sono chiari o su cui incontri dei problemi...
Il procedimento generale che e' stato adottato ora dovrebbe essere chiaro, quali sono gli altri dubbi?
Il.Socio è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2008, 13:05   #12
Il.Socio
Bannato
 
L'Avatar di Il.Socio
 
Iscritto dal: Feb 2006
Città: Torino
Messaggi: 93
Quote:
Originariamente inviato da Tony Hak Guarda i messaggi
era un po' tutto .. ma soprattutto il this
this identifica l'istanza corrente.
In riferimento a
Codice:
public Pippo(int anni) {
    this.anni = anni;   // utilizzo this
    occhi = 2; // sempre due occhi. in questo caso posso omettere this
}
viene utilizzato per distinguere tra la proprieta anni appartenente all'istanza ed il valore del parametro anni passato in input al costruttore...
Questo tipo di approccio e' generalmente sconsigliato, ed e' preferibile scrivere piuttosto:
Codice:
public Pippo(int degliAnni) {
    anni = degliAnni; 
    occhi = 2; // sempre due occhi. in questo caso posso omettere this
}
In modo da omettere l'utilizzo non indispensabile di this ed evitare deltutto ogni tipo di ambiguita'.


In questo contesto viene creata una nuova istanza di MiaData:
Codice:
MiaData data = new MiaData (this);
richiamando il secondo costruttore di MiaData (che in pratica consente di creare una copia dell'oggetto)
Codice:
        public MiaData (MiaData data)
        {
            giorno = data.giorno;
            mese = data.mese;
            anno = data.anno;
        }
a cui viene passato come parametro l'istanza corrente (identificata con this)

Ultima modifica di Il.Socio : 04-02-2008 alle 13:10.
Il.Socio è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2008, 13:13   #13
Tony Hak
Senior Member
 
L'Avatar di Tony Hak
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 1661
allora... prima di tutto ringrazio tutti ..seconda cosa .. il concetto che non mi era chiaro er al'uso di this..e poi .. new (xxx) crea la classe assegnando valore agli attributi ... ma poi richiama anche il costruttore ?
__________________
Tony Hak è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2008, 13:38   #14
Il.Socio
Bannato
 
L'Avatar di Il.Socio
 
Iscritto dal: Feb 2006
Città: Torino
Messaggi: 93
Ogni volta che crei una istanza con new, cio' comporta la chiamata ad un qualche costruttore associato (puo' essere presente piu' di un costruttore).

Il costruttore che sara' richiamato dipende dal tipo e dal numero di parametri che vengono passati in fase di creazione dell'istanza.
Es. il codice:
MiaData prova = new MiaData(1, 2, 1900);
provoca la chiamata ad un qualche costruttore che prende in input 3 parametri di tipo intero.
Quindi sara' richiamato il primo costruttore:
public MiaData (int giorno, int mese, int anno)

Se dopo prosegui scrivendo:
MiaData nuovaData = new MiaData(prova);
questo comporta la chiamata ad un qualche costruttore che prende 1 solo parametro di tipo MiaData.
Quindi sara' richiamato il secondo costruttore:
public MiaData (MiaData data);

Se continui ancora scrivendo:
MiaData koData = new MiaData(1, 2);
questo generera' un'errore in fase di compilazione perche' nella classe MiaData non e' stato definito alcun costruttore che prende 2 parametri di tipo intero.
Il.Socio è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2008, 13:42   #15
Tony Hak
Senior Member
 
L'Avatar di Tony Hak
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 1661
ok ... capito .. ma quindi quando faccio come hai detto tu new (2,3 ,4) ad esempio ... c'e' la chiamate e quindi l'esecuzione del costruttore..giusto ? ..e senti .. se in una classe non ci sono costruttori ,c'e' il costruttore di default. la chiamata a new (xxx) provoca errore ? e come si fa achiamare il cotruttore di default di una classe ?
__________________
Tony Hak è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2008, 13:59   #16
Il.Socio
Bannato
 
L'Avatar di Il.Socio
 
Iscritto dal: Feb 2006
Città: Torino
Messaggi: 93
Quote:
Originariamente inviato da Tony Hak Guarda i messaggi
ok ... capito .. ma quindi quando faccio come hai detto tu new (2,3 ,4) ad esempio ... c'e' la chiamate e quindi l'esecuzione del costruttore..giusto ?
Hai capito perfettamente

Quote:
Originariamente inviato da Tony Hak Guarda i messaggi
..e senti .. se in una classe non ci sono costruttori ,c'e' il costruttore di default. la chiamata a new (xxx) provoca errore ?
Si, provoca errore perche' nella classe non e' stato definito nessun costruttore che prende in input un parametro di tipo xxx.
Cfr. precedente esempio MiaData koData = new MiaData(1,2)

Quote:
Originariamente inviato da Tony Hak Guarda i messaggi
e come si fa achiamare il cotruttore di default di una classe ?
Il costruttore di default non prende alcun parametro di alcun tipo, quindi per richiamarlo, dovrai scrivere qualcosa del tipo MiaData prova = new MiaData();
pero' considera che nel momento in cui definisci anche 1 solo costruttore, quello di default va "a perdersi", quindi nel tuo codice non e' possibile richiamare quello di default, sarebbe possibile se tu eliminassi i due costruttori che hai definito, o in alternativa, potresti definire in MiaData un nuovo costruttore che non prende alcun parametro di alcun tipo public MiaData() {}

Ultima modifica di Il.Socio : 04-02-2008 alle 14:04.
Il.Socio è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2008, 15:12   #17
Tony Hak
Senior Member
 
L'Avatar di Tony Hak
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 1661
ok ... ok .. allora io faccio "new chiama()" per richiamare il costruttore di default....che succede ? cosa va in esecuzione ? la classe contenente il costruttore di default ?
__________________
Tony Hak è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2008, 18:09   #18
Il.Socio
Bannato
 
L'Avatar di Il.Socio
 
Iscritto dal: Feb 2006
Città: Torino
Messaggi: 93
Non sono certo di aver capito l'entita' del tuo dubbio...
Il nome del costruttore deve necessariamente rispecchiare quello della classe a cui appartiene ed e' l'unico metodo per cui non viene mai dichiarato il tipo del valore di ritorno...
es: public MiaData() {}
e' un costruttore della classe MiaData.

Non essendo stata definita una classe nominata "chiama" ti sara' segnalato un errore in fase di compilazione...

Ultima modifica di Il.Socio : 04-02-2008 alle 18:11.
Il.Socio è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2008, 22:59   #19
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7257
Quote:
Originariamente inviato da Tony Hak Guarda i messaggi
ok ... ok .. allora io faccio "new chiama()" per richiamare il costruttore di default....che succede ? cosa va in esecuzione ? la classe contenente il costruttore di default ?
se non hai definito nessun costruttore e chiami il costruttore di default viene il chiamato il costruttore di Object. perchè tutte le classi sono sottoclassi dalla classe Object.
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 13:08   #20
Tony Hak
Senior Member
 
L'Avatar di Tony Hak
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 1661
Quote:
Originariamente inviato da k0nt3 Guarda i messaggi
se non hai definito nessun costruttore e chiami il costruttore di default viene il chiamato il costruttore di Object. perchè tutte le classi sono sottoclassi dalla classe Object.
ecco ! ehm .. e cosa fa il costruttore di Object ? ...
__________________
Tony Hak è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti Hisense A85N: il ritorno all’OLED è convi...
Recensione Borderlands 4, tra divertimento e problemi tecnici Recensione Borderlands 4, tra divertimento e pro...
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale TCL NXTPAPER 60 Ultra: lo smartphone che trasfor...
Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming Un fulmine sulla scrivania, Corsair Sabre v2 Pro...
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni Nokia Innovation Day 2025: l’Europa ha bisogno d...
The Social Reckoning: il seguito di The ...
iPhone 16 si trova ora su Amazon a soli ...
Amazon fa a pezzi i prezzi dei monitor g...
Componenti hardware e periferiche PC a p...
Pianeta in crisi: 7 su 9 limiti vitali g...
Galaxy S25 FE con taglio di prezzo di 10...
4 robot aspirapolvere e 3 scope elettric...
Nuovissimi Xiaomi 15T e 15T Pro con tagl...
Le agenzie federali americane potranno u...
Smartphone pieghevoli sempre più ...
LG svela le Easy TV, una nuova gamma di ...
L'equipaggio della missione Shenzhou-20 ...
Possibili detriti spaziali del razzo cin...
Amazon distrugge i prezzi: TV OLED LG, i...
Trump studia dazi fino al 100% per sping...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:32.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v