PDA

View Full Version : [Java] Problema da principiante con this.()


utrecht
30-07-2003, 22:46
Ebbene sì, sono alle prime sperimentazioni con java.....
Un esercizio che ha scopo puramente didattico per apprendere il duplice utilizzo di 'this'.
Se i metodi "ProvaDiThis" hanno come tipo di ritorno void, ottengo il seguente errore: <call to this must be first statement in costructor... >
Non riesco a comprenderne il perchè.
Mi potreste aiutare??
Grazie

Ecco il codice:
---

public class ProvaDiThis
{

public int unNumero=0;
public int unAltroNumero=0;

ProvaDiThis(int nome)
{
unNumero=nome;
System.out.println("var di istanza inizializzata normalmente: unNumero="+unNumero);
}

ProvaDiThis(int nome, int unAltroNumero)
{
this(nome);
this.unAltroNumero=unAltroNumero;
}

ProvaDiThis()
{
this(11,114);
System.out.println(" bla... bla...\n");
}

void FinalMeth() {
System.out.println("unNumero vale: "+unNumero+"\nunAltroNumero vale: "+unAltroNumero);
}

public static void main (String args[])
{
ProvaDiThis obj =new ProvaDiThis();
obj.FinalMeth();
}
}

---

Vegale
30-07-2003, 23:53
Hmm.. nn ho ben capito quand'è che trovi l'errore, cmq i ProvaDiThis sono costruttori, non metodi, per cui hanno solo il compito di creare nuovi oggetti e non restituiscono nulla.
La roba che hai postato funziona.

kingv
31-07-2003, 08:44
come ti e' stato detto

ProvaDiThis(int nome)
ProvaDiThis(int nome, int unAltroNumero)
ProvaDiThis()

sono tre costruttori che prendono differenti parametri.

con this(...) chiami un costruttore da un altro ma se lo fai deve essere la prima istruziona all'interno di un costruttore.
E' una scelta di design del linguaggio per garantire che gli oggetti vengano costruiti adeguatamente e senza possibili comportamenti anomali.

anche se chiami super(...) la chiamata deve essere la prima istruzione.

utrecht
31-07-2003, 09:35
i ProvaDiThis sono costruttori, non metodi :cry:
comunque l'avevo detto all'inizio: non sono affatto preparato!!

nn ho ben capito quand'è che trovi l'errore

Se ad es. scrivessi "void ProvaDiThis(int nome)" oppure "void ProvaDiThis(int nome, int unAltroNumero)"

Però adesso ho capito l'errore!!
Grazie mille!