Cristian02 ha scritto:
1)Come si ottiene un riferimento ad un oggetto? è una variabile che punta all'indirizzo di memoria dove si trova il valore dell'oggetto
Se si intende "come", ci sono vari modi: un oggetto lo ottieni dalla creazione con
new Tipo( ... ), oppure da un metodo che restituisce un
reference. O da una variabile
reference. Qualunque variabile
reference, in generale, o vale null o fa riferimento ad un oggetto.
Cristian02 ha scritto:
2)Quali membri di una classe si dichiarano privati e perchè? le variabili che vengono dichiarate nella classe sono attributi, perchè gli attributi non possono essere richiamati dall'esterni della classe
I campi ("field") "di classe" o "di istanza" e i metodi li dichiari private per non renderli accessibili dall'esterno. Tipicamente perché sono dati e comportamenti che non hanno significato/utilità all'esterno e devono quindi restare "nascosti".
Cristian02 ha scritto:
3)Qual è il significato del modificatore final per un attributo? quando dichiariamo final a un attributo diventa una costante, quindi è solo visibile nella stessa classe
4)Quando un attributo si dichiara final e in tal caso qual è la visibilità più idonea? quando dichiariamo final a un attributo diventa una costante quindi è solo visibile nella stessa classe
final rende solo il valore non modificabile (ovvero una "costante"). Non c'entra con la visibilità (un field può essere public
e final).
Cristian02 ha scritto:
5)Come si definiscono gli attributi condivisibili da tutte le istanze della stessa classe?campi/attributi/variabili statici (o di classe). Li roconosci perché hanno tutti la parola chiave static davanti e sono condivisi da tutte le istanze di una classe (i campi non statici invece hanno un valore che dipende dalla singola istanza, ossia dal singolo oggetto che crei)
Sì, static indica che il membro "appartiene" alla classe e non a ciascun distinto oggetto.
Cristian02 ha scritto:
6)è necessario il metodo costruttore in una classe? Si, è necessario il metodo costruttore di una classe, in cui il compito è proprio quello di creare nuove istanze(Oggetti)
Tutte le classi hanno sempre almeno 1 costruttore, non può
non esserci! Se non ne scrivi almeno uno esplicitamente, il compilatore inserisce quello di "default". Se/quali/quanti costruttori inserire in una classe, dipende dal design della classe e da come deve permettere la creazione delle istanze.
Cristian02 ha scritto:
7)Quando necessita l'utilizzo della parola chiave static?
Tipicamente per:
- costanti "globali"
- metodi di "utilità" (tipo Math.random() )
Mentre per altre variabili/metodi è più raro usare static e solo per certi design o scenari particolari.
Cristian02 ha scritto:
8)Descrivere la differenza tra variabili di stanza e variabili di classe? La variabile istanziati vengono create quando si crea l'oggetto e continuano esistere finche si può accedere all'oggetto; La variabile di classe viene memorizzato un unico valore che è comune a tutti gli oggetti della classe
Detto non benissimo ma sostanzialmente ok.
Cristian02 ha scritto:
9)Qual è il valore assunto da un puntatore ad un oggetto dichiarato ma non allocato? se dichiari un oggetto e basta (cioè NON fai una new, oppure non lo assegni ad altro oggetto della stessa classe) non viene allocata memoria per l'oggetto, quindi l'oggetto ha valore null; il valore null è inizializzato direttamente dal compilatore ed indica che non si riferisce a nulla (non "punta" a niente).
Dipende: le variabili locali
devono essere inizializzate esplicitamente (NON hanno un valore di default). I field
reference (static e non static) hanno come default null se non c'è un inizializzatore esplicito.
Cristian02 ha scritto:
10)Descrivere la differenza tra dichiarazione e allocazioni di un oggetto
Detto così, molto male. Un oggetto non lo "dichiari". Si dichiara una variabile (reference), non un oggetto.
Cristian02 ha scritto:
11)Gli oggetti dove sono allocati e da cosa dipende la quantità di spazio occupato? Gli oggetti sono stati allocati indirizzi di memoria, dipende quanti attributi hai istanziati
Gli oggetti sono allocati sul
heap space della JVM. Lo spazio occupato da un oggetto ovviamente dipende dalle variabili "di istanza" che possiede.
Cristian02 ha scritto:
12)Quale componente di java allocata gli oggetti in memoria e quali li elimina? <Penso che è "gaber collection"> //Non ho risposto
E' la JVM che alloca gli oggetti sul heap space. Ed è sempre la JVM che elimina gli oggetti non più utilizzati tramite il
garbage-collector che "reclama" gli oggetti che NON sono più "raggiungibili".
Cristian02 ha scritto:
13)Tutte le classi di un applicazione contengono il metodo main ()? no, non necessariamente
il metodo main non deve essere definito per forza in tutte le classi; chiaramente se vuoi far partire il programma ce ne deve essere almeno uno in una classe pubblica
Il main è solo il "punto di ingresso" di una applicazione. Ovviamente ne serve almeno uno.
Cristian02 ha scritto:
14)Perchè il file in cui è salvata la classe che contiene il metodo main () deve avere lo stesso nome della classe?è una richiesta specifica del linguaggio: in Java se definisci una classe in un file, il nome del file deve coincidere col nome della classe;
se definisci più classi in un file, solo una può essere public e il file assume il nome della classe pubblica
È una regola di Java. Se in un sorgente c'è una classe
public, il sorgente
deve chiamarsi esattamente come quella classe (estensione .java a parte).
Cristian02 ha scritto:
15)Perchè il metodo main () è statico "Static"? il metodo main () è statico perchè quando avvia un programma non esiste ancora alcun oggetto
Ok
Cristian02 ha scritto:
16)Cos'è this, e quando si utilizza? This in italiano vuol dire "Questo" si riferisce davanti a un oggetto o un attributo per evitare errori logici
In un metodo "di istanza" (non static), il
this è il riferimento all'oggetto su cui il metodo è stato invocato. Nei costruttori il
this è il riferimento all'oggetto in fase di costruzione.
Non c'entrano "errori logici". Il this generalmente può essere usato implicitamente. Va esplicitato solo in certi casi quando ad esempio c'è una situazione di
shadowing, cioè una variabile locale o parametro che "nasconde" una variabile di istanza con lo stesso nome.
---------
Dai dubbi risulta una situazione un po' preoccupante. Considera che le questioni che hai posto sono davvero super-super-basilari. Non so se hai già affrontato (o se affronterai) tutti i concetti più avanzati, es. eccezioni, controllo del flusso, costrutti avanzati, collection, generics, multi-threading, ecc..
Se vorrai vedere queste cose, dovrai (RI-)studiare davvero molto bene.