Il 0% ha trovato utile questo documento (0 voti)
2 visualizzazioni10 pagine

Domande Java Prima Parte

Il documento presenta una serie di domande e risposte riguardanti concetti di programmazione in Java, tra cui cicli, metodi, operatori e gestione della memoria. Viene discusso il comportamento di vari costrutti, come il passaggio per valore e l'overriding dei metodi. Inoltre, si affrontano argomenti come la gestione delle eccezioni e le differenze tra strutture dati come ArrayList e LinkedList.
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
2 visualizzazioni10 pagine

Domande Java Prima Parte

Il documento presenta una serie di domande e risposte riguardanti concetti di programmazione in Java, tra cui cicli, metodi, operatori e gestione della memoria. Viene discusso il comportamento di vari costrutti, come il passaggio per valore e l'overriding dei metodi. Inoltre, si affrontano argomenti come la gestione delle eccezioni e le differenze tra strutture dati come ArrayList e LinkedList.
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd

DOMANDA 1​

Dato il seguente pseudocodice:

do the following 5 times


roll the die
add value to total

Quale istruzione implementa il ciclo?

●​ for con i = 5
●​ while
●​ do
●​ for con i <= 5


DOMANDA 2 ​
Dato il seguente ciclo:

for (int i = 20; i <= 2; i = i - 6)​


Quali valori assume i?

RISPOSTA: Nessuno — il ciclo non viene mai eseguito​


DOMANDA 3​
Data la seguente espressione con operatore ternario:

q = p % 4 != 0 ? (p % 4) : 4;

Quanto vale q se p=9?

RISPOSTA: q = 1

L'operatore ternario funziona così:

condizione ? valore_se_vera : valore_se_falsa


DOMANDA 4​
I file compilati Java hanno estensione?

●​ .java
●​ .class
●​ .exe
●​ .jar


DOMANDA 5​
Come si dichiara una costante in un metodo (in Java)?

RISPOSTA: final tipo NOME = valore;

In Java una costante locale (dentro un metodo) si dichiara con la keyword final:

final int MAX_VALORE = 100;

final double PI = 3.14159;


DOMANDA 6​
Dato il seguente metodo ricorsivo:

public int mistery(int n, int m) {

if (n == 0)​
return 1;​
if (n == 1)​
return m;​
return n + mistery(n - 1, m);

Cosa restituisce mistery(1, 5)?

RISPOSTA: 5

Con n = 1 si entra direttamente nel secondo caso base:

mistery(1, 5)

→ n == 1 → return m → return 5

Nessuna ricorsione viene attivata — la funzione restituisce subito m, che vale 5.


Vale la pena capire anche gli altri casi per completezza:

●​ mistery(0, 5) → restituisce 1 (primo caso base)


●​ mistery(2, 5) → 2 + mistery(1, 5) = 2 + 5 = 7
●​ mistery(3, 5) → 3 + mistery(2, 5) = 3 + 7 = 10

In generale per n >= 2 calcola: n + (n-1) + ... + 2 + m — una somma


decrescente fino a raggiungere il caso base n == 1.
DOMANDA 7​
Data la seguente classe:

public class MyClass {​


public void methodA(String s) {​
s = "987"; }

public void methodB() {​


String val = "xyz";​
methodA(val);​
[Link](val);​
}}

L'esecuzione di methodB() cosa provoca sullo standard output?

RISPOSTA: stampa xyz

Questo è un esempio classico del passaggio per valore in Java.

Passo Cosa succede

val = "xyz" val punta alla stringa "xyz"

methodA(val) viene passata una copia del riferimento a "xyz"

s = "987" dentro methodA s (la copia locale) viene fatta puntare a "987"

si torna in methodB val punta ancora a "xyz" — non è cambiata

println(val) stampa xyz

⚠️ Trappola fondamentale: in Java le String sono immutabili e i riferimenti


vengono passati per valore. Dentro methodA si riassegna solo la variabile
locale s, non l'oggetto a cui punta val in methodB. Per modificare val
dall'esterno bisognerebbe usare un tipo mutabile (es. StringBuilder)
oppure restituire il nuovo valore con return.
DOMANDA 8​
Data la seguente classe:

public class MyClass {​


public void methodA(String s) {​
s = "987"; }

public void methodB() {​


String val = "xyz";​
methodA(val);​
[Link](val);​
}}

L'esecuzione di methodA() cosa provoca sullo standard output?

RISPOSTA: nulla — nessun output

methodA si limita a riassegnare la variabile locale s, ma non contiene nessuna istruzione di


stampa ([Link] o simili).

Elemento Presente in methodA?

[Link] ❌
[Link] ❌
Qualsiasi output ❌
Nota: la println si trova solo in methodB, e stampa val dopo la chiamata a
methodA — non durante. Chiamando methodA direttamente, sullo standard
output non appare assolutamente nulla.
DOMANDA 9​
Qual è il metodo per verificare se 2 riferimenti a oggetti sono identici in Java?

RISPOSTA: l'operatore ==

In Java esistono due modi per confrontare oggetti, con significati molto diversi:

Metodo Cosa confronta

== Se i due riferimenti puntano allo stesso oggetto in memoria

.equals() Se i due oggetti hanno lo stesso contenuto/valore

Esempio chiarificatore:

String a = new String("ciao");

String b = new String("ciao");

String c = a;

[Link](a == b); // false → oggetti diversi in memoria

[Link]([Link](b)); // true → stesso contenuto

[Link](a == c); // true → stesso riferimento

⚠️ Trappola frequente: usare == per confrontare stringhe o oggetti pensando di


confrontare il valore. Per il contenuto si usa sempre .equals(), per l'identità
(stesso oggetto) si usa ==.
DOMANDA 10​
Cosa provoca l'operazione a / 0 in Java?

RISPOSTA: dipende dal tipo di a

In Java il comportamento cambia a seconda che a sia intero o in virgola mobile:

Tipo di a Risultato

int / long Lancia ArithmeticException a runtime con messaggio "/


by zero"

float / Non lancia eccezione — restituisce Infinity (o NaN se 0.0


double / 0.0)

Esempi:

int a = 10;

[Link](a / 0); // → ArithmeticException: / by zero

double b = 10.0;

[Link](b / 0.0); // → Infinity

double c = 0.0;

[Link](c / 0.0); // → NaN

⚠️ Se la domanda non specifica il tipo, la risposta attesa è quasi


certamente ArithmeticException — che è il caso intero, il più comune
in un contesto scolastico.
DOMANDA 11​
ArrayList e LinkedList hanno la stessa...?

●​ a) struttura interna di memorizzazione


●​ b) interfaccia (List)
●​ c) velocità di accesso agli elementi
●​ d) occupazione di memoria


DOMANDA 12​
Qual è la migliore strategia per gestire coesione e accoppiamento in Java?

●​ a) alta coesione, alto accoppiamento


●​ b) bassa coesione, basso accoppiamento
●​ c) alta coesione, basso accoppiamento
●​ d) bassa coesione, alto accoppiamento




DOMANDA 13​
Quale metodo modifica l'oggetto sul quale è invocato?

●​ a) [Link]()
●​ b) [Link]()
●​ c) [Link]()
●​ d) [Link]()


DOMANDA 14​
Dato il seguente codice:

public class Parent {

public String toString() {

return "I'm the parent";

public class Child extends Parent {

public String toString() {

return "I'm the child";

public static void main(String[] args) {

Parent p = new Child();

[Link](p);

Cosa stampa [Link](p)?

●​ a) "I'm the parent"


●​ b) "I'm the child"
●​ c) Errore di compilazione
●​ d) Errore a runtime

RISPOSTA: b) "I'm the child"


SPIEGAZIONE DETTAGLIATA

1 — Ereditarietà (extends) Child estende Parent, quindi eredita tutti i suoi metodi. È una
relazione "Child è un Parent".

2 — Override di toString() Child ridefinisce toString() con una propria versione. Quando Java
cerca quale toString() chiamare, usa quella della classe reale dell'oggetto, non quella
dichiarata.

3 — La riga chiave:

Parent p = new Child();

Codice Significato

Parent p Il tipo dichiarato del riferimento è Parent

new L'oggetto reale creato in memoria è un


Child() Child

Questa è una delle forme base del polimorfismo in Java.

4 — [Link](p) println chiama automaticamente toString()


sull'oggetto passato. Java usa il dynamic dispatch (binding dinamico): guarda il tipo
reale dell'oggetto a runtime (Child), non il tipo dichiarato (Parent), e chiama la
toString() di Child → stampa "I'm the child".

⚠️ Trappola: si potrebbe pensare che essendo p dichiarato come Parent,


usi il suo toString(). Sbagliato — in Java il metodo eseguito dipende
sempre dall'oggetto reale, non dal tipo del riferimento. Questo è
esattamente il cuore del polimorfismo.

Potrebbero piacerti anche