Index
Related
Heap: Rappresenta l’allocazione degli oggetti, contenenti i loro campi.
Stack: Rappresenta i “Frame di attivazione” ovvero:
- Chiamate ai metodi
- Variabili locali
Metaspace: Rappresenta l’allocazione dei capi statici:
- quindi variabili statiche
- (forse anche metodi ????)
- cosa analizzare capi statici
- analizzare main (partendo da args)
A cosa inizializzo una capo "vuoto"
0
⇒ Variabili Numeriche (int, double, etc.)null
⇒ Variabili Oggetto (array, stringe, etc.)false
⇒ Variabili booleaneEsempio:
staic private int passaggi;
viene inizializzato a 0 nel metaspace
- I campi non statici vengono inizializzati solo quando chiamati da un metodo e vanno nella heap
Inizializzazione di variabili locali
Verrano inizializzate ad
undef
se non gli diamo un valoreEsempio:
staic private int passaggi;
viene inizializzato a 0 nel metaspace
Args
Inizializziamo args nella stack ma punta ad un oggetto nella heap, e quest oggetto è una array di stringe.
oss: l’oggetto puntao da args contiene puntatori a stinge
Costruttori
se incontriamo un costruttore dobbiamo inserirlo nello stack, e dopo va cancellato e al suo posto ci sarà l’ogetto nel main (o nel metodo che ha chiamato il costruttore)
Classi
Ogni volta che incontriamo una classe (ovvero quando eseguiamo un costruttore di una classe):
- per prima cosa vengono allocati i campi statici (se è la prima volta che )
Classi e Sottoclassi
Se ci troviamo in una situazione del genere, dove:
- La classe
Persona Concreta
estende la classePersona
e - sia la classe
persona
sia la classePersona Concreta
hanno entrambe un metodo to string
In questo caso utilizziamo il metodo toString
della classe PersonaConcreta
e non quello di Persona
, infatti in questi casi utilizziamo sempre i metodi della classe che è stata utilizzata per costruire l’oggetto.
Invece, se ci troviamo in una situazione del genere, dove:
- La classe
Persona Concreta
estende la classePersona
e - solo la classe
persona
possiede un metodo to string
Se eseguiamo:
In questo caso utilizziamo il metodo di Persona
, sia per p1
che per p2
, infatti entrambi ereditano il metodo dalla classe to string