Precedente :: Successivo |
Autore |
Messaggio |
mdweb Dio maturo
Registrato: 18/12/07 15:59 Messaggi: 4412
|
Inviato: 03 Apr 2008 13:03 Oggetto: * [java]aiuto con i costruttori |
|
|
Ciao a tutti ho un problema.Sto studiando JAVA .
Ciao puoi darmi un aiuto non ho capito una cosa:
A cosa servono i costruttori?E' un argomento che non ho capito bene adesso ti riporto qualche esempio:
Codice: |
public class Punto{
public Punto
{
x=a;
y=b;
}
public int x;
public int y;
}
|
se io scrvo cosi:
Codice: |
Punto punto1=new Punto();
|
perchè non funziona?
Ma il costruttore PRende il nome della classe.Ma quale classe?
Il nome del file?
Oppure quella classe che indica l'insieme di oggetti? |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 03 Apr 2008 14:31 Oggetto: Re: [java]aiuto con i costruttori |
|
|
mdweb ha scritto: | A cosa servono i costruttori? E' un argomento che non ho capito bene |
Ti invito a rileggere bene, allora, perchè è un concetto basilare. Ti dirò solo che quando definisci una classe descrivi come sarà fatto uno specifico oggetto... che però non esisterà finchè non l'avrai istanziato. Durante questa operazione, appunto, viene eseguito il costruttore.
|
|
Top |
|
|
mdweb Dio maturo
Registrato: 18/12/07 15:59 Messaggi: 4412
|
Inviato: 03 Apr 2008 17:04 Oggetto: |
|
|
quindi anche s eio non metto uno costruttore....lo metto automaticamente la JVM?O NO? |
|
Top |
|
|
freemind Supervisor sezione Programmazione
Registrato: 04/04/07 20:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 03 Apr 2008 19:59 Oggetto: |
|
|
Ciao
Premetto che non programmo in java (per ora).
Io credo che il tuo problema siano quelle due var a e b che non hai mai definito.
Dal tuo esempio credo che tu volessi fare una cosa del tipo:
Codice: |
public class Punto{
public Punto(int a,int b) // <-- Nota i parametri formali!!!!
{
x=a;
y=b;
}
public int x;
public int y;
}
|
e a questo punto:
Codice: |
Punto punto1=new Punto(5,10); // Nota i parametri attuali!!!
|
JAVA (come quasi tutti i compilatori C++) prevede che una classe abbia sempre un costruttore e se non lo definisci tu, lo mette java stesso.
Il costruttore messo da java si chiama costruttore di default e di fatto non fa nulla.
Il costruttore serve ad inizializzare l'oggetto istanziato. Con JAVA devi avere la certezza dell'inizializzazione per cui il costruttore di default inizializza le var membro ai valori di default delle stesse (per gli interi credo che sia 0).
Tu puoi definire uno o più costruttori e a quel punto gli fai fare quello che vuoi.
Appena un oggetto viene istanziato l'interprete esegue subito il costruttore,se non c'è chiama quello di default, se c'è ne uno solo chiama quello altrimenti in base ai parametri formali esegue quello corrispondente. (Questa cosa è possibile tramite l'overloading dei metodi, ossia due metodi possono avere lo stesso nome se hanno almeno un parametro formale diverso)
Se la tua classe Punto fosse:
Codice: |
public class Punto
{
public Punto(int a)
{
x=a;
y=0;
}
public Punto(int a,int b) // <-- Nota i parametri formali!!!!
{
x=a;
y=b;
}
public int x;
public int y;
}
|
Quando tu scrivi
Codice: | Punto punto1=new Punto(4); |
viene chiamato il primo costruttore; con:
Codice: | Punto punto1=new Punto(4,9); |
viene chiamato il secondo.
Ricorda che il costruttore di default viene aggiunto se e solo se tu non ne definisci.
Ad esempio le seguenti due classi sono identiche:
Codice: |
public class Pippo
{
public Pippo()
{
// sto coso non fa nulla
}
}
public class Pippo
{
// Qui è come se ci fosse il costruttore della versione precedente
}
|
|
|
Top |
|
|
mdweb Dio maturo
Registrato: 18/12/07 15:59 Messaggi: 4412
|
Inviato: 04 Apr 2008 15:51 Oggetto: |
|
|
freemind ha scritto: | Ciao
Premetto che non programmo in java (per ora).
Io credo che il tuo problema siano quelle due var a e b che non hai mai definito.
Dal tuo esempio credo che tu volessi fare una cosa del tipo:
Codice: |
public class Punto{
public Punto(int a,int b) // <-- Nota i parametri formali!!!!
{
x=a;
y=b;
}
public int x;
public int y;
}
|
e a questo punto:
Codice: |
Punto punto1=new Punto(5,10); // Nota i parametri attuali!!!
|
JAVA (come quasi tutti i compilatori C++) prevede che una classe abbia sempre un costruttore e se non lo definisci tu, lo mette java stesso.
Il costruttore messo da java si chiama costruttore di default e di fatto non fa nulla.
Il costruttore serve ad inizializzare l'oggetto istanziato. Con JAVA devi avere la certezza dell'inizializzazione per cui il costruttore di default inizializza le var membro ai valori di default delle stesse (per gli interi credo che sia 0).
Tu puoi definire uno o più costruttori e a quel punto gli fai fare quello che vuoi.
Appena un oggetto viene istanziato l'interprete esegue subito il costruttore,se non c'è chiama quello di default, se c'è ne uno solo chiama quello altrimenti in base ai parametri formali esegue quello corrispondente. (Questa cosa è possibile tramite l'overloading dei metodi, ossia due metodi possono avere lo stesso nome se hanno almeno un parametro formale diverso)
Se la tua classe Punto fosse:
Codice: |
public class Punto
{
public Punto(int a)
{
x=a;
y=0;
}
public Punto(int a,int b) // <-- Nota i parametri formali!!!!
{
x=a;
y=b;
}
public int x;
public int y;
}
|
Quando tu scrivi
Codice: | Punto punto1=new Punto(4); |
viene chiamato il primo costruttore; con:
Codice: | Punto punto1=new Punto(4,9); |
viene chiamato il secondo.
Ricorda che il costruttore di default viene aggiunto se e solo se tu non ne definisci.
Ad esempio le seguenti due classi sono identiche:
Codice: |
public class Pippo
{
public Pippo()
{
// sto coso non fa nulla
}
}
public class Pippo
{
// Qui è come se ci fosse il costruttore della versione precedente
}
|
|
preciso come sempre! |
|
Top |
|
|
|