Quiz: Costanti operatori e gestione Java (67 domande)

Domande e risposte dettagliate

1. Quale descrizione identifica correttamente Java?

È un linguaggio orientato agli oggetti, general purpose e interpiattaforma.
È un linguaggio procedurale, specializzato e legato a una singola piattaforma.
È un linguaggio dichiarativo, general purpose e progettato per un solo sistema operativo.
È un linguaggio esclusivamente grafico, interpretato e destinato ai dispositivi mobili.

È un linguaggio orientato agli oggetti, general purpose e interpiattaforma.

Spiegazione

Java combina l'orientamento agli oggetti con un uso general purpose e la capacità di funzionare su più piattaforme. La descrizione procedurale e legata a una singola piattaforma contraddice queste caratteristiche fondamentali.

2. Un programma Java deve essere eseguito su una piattaforma diversa da quella di sviluppo: quale condizione caratterizza la sua portabilità interpiattaforma?

Deve essere riscritto usando le librerie specifiche del sistema operativo di destinazione.
Necessita di un nuovo programma sorgente compatibile con il processore utilizzato.
Può essere eseguito senza modifiche se la nuova piattaforma dispone di una JVM.
Richiede la ricompilazione del codice dopo aver adattato le istruzioni al nuovo sistema.

Può essere eseguito senza modifiche se la nuova piattaforma dispone di una JVM.

Spiegazione

Java è interpiattaforma perché il medesimo programma può essere eseguito senza modifiche su piattaforme diverse dotate di JVM. La ricompilazione e l'adattamento del codice descrivono invece il porting tipico di altri linguaggi multipiattaforma.

3. Quale sequenza descrive correttamente l'esecuzione di un programma Java?

Il compilatore esegue direttamente il sorgente, mentre la JVM lo converte in bytecode.
La JVM produce il codice sorgente, poi il compilatore lo interpreta sul processore della macchina.
Il processore genera il bytecode, poi il compilatore lo interpreta tramite la JVM.
Il compilatore produce bytecode, poi la JVM lo interpreta e lo esegue sulla macchina reale.

Il compilatore produce bytecode, poi la JVM lo interpreta e lo esegue sulla macchina reale.

Spiegazione

Il compilatore Java traduce il sorgente in bytecode; successivamente la JVM interpreta quel bytecode e lo esegue sulla piattaforma concreta. La JVM non genera il sorgente e il processore non produce il bytecode.

4. Che cosa caratterizza il bytecode Java?

È un formato grafico che descrive l'interfaccia dell'applicazione prima della compilazione.
È codice sorgente leggibile destinato alla modifica diretta da parte del programmatore.
È un insieme di istruzioni simili al linguaggio macchina, ma indipendenti da un processore specifico.
È un insieme di istruzioni legate a un particolare processore già pronte per l'esecuzione nativa.

È un insieme di istruzioni simili al linguaggio macchina, ma indipendenti da un processore specifico.

Spiegazione

Il bytecode contiene istruzioni simili a quelle del linguaggio macchina, ma non dipende da uno specifico processore ed è destinato alla JVM. Il codice sorgente e il codice nativo del processore sono formati diversi dal bytecode.

5. Quale differenza distingue un'applicazione a console da un'applicazione GUI?

La console usa un'interfaccia testuale, mentre la GUI usa elementi grafici come pulsanti e menu.
La console usa finestre e icone, mentre la GUI comunica attraverso righe di comando testuali.
La console richiede un browser, mentre la GUI viene eseguita attraverso un compilatore dedicato.
La console gestisce oggetti grafici, mentre la GUI visualizza soltanto risultati in formato testuale.

La console usa un'interfaccia testuale, mentre la GUI usa elementi grafici come pulsanti e menu.

Spiegazione

Le applicazioni a console comunicano tramite testo, mentre le applicazioni GUI presentano elementi grafici e dispositivi di interazione come mouse, pulsanti e menu. Le descrizioni che invertono questi elementi confondono le due interfacce.

6. Come si distinguono le applicazioni Java e le apps dalle applet rispetto all'ambiente di esecuzione?

Applicazioni e applet richiedono un browser, mentre le apps vengono eseguite tramite un editor.
Applicazioni e apps funzionano dentro un browser, mentre le applet vengono avviate direttamente dalla JVM.
Applicazioni e apps possono essere eseguite direttamente dalla JVM, mentre le applet funzionano all'interno di un browser.
Applicazioni e apps richiedono un sistema grafico, mentre le applet richiedono un compilatore separato.

Applicazioni e apps possono essere eseguite direttamente dalla JVM, mentre le applet funzionano all'interno di un browser.

Spiegazione

Applicazioni e apps vengono eseguite direttamente attraverso la JVM, mentre le applet sono eseguite all'interno di un browser. Confondere il browser con la JVM porta a invertire la distinzione fondamentale tra queste categorie.

7. Quale insieme di strumenti appartiene al JDK?

Un interprete JavaScript, un editor HTML e un simulatore di dispositivi mobili.
Un browser, un processore virtuale e un compilatore dedicato alle interfacce GUI.
Il compilatore javac, l'interprete java e l'Appletviewer per provare le applet.
Un editor grafico, un debugger e un gestore di versioni per progettare applicazioni.

Il compilatore javac, l'interprete java e l'Appletviewer per provare le applet.

Spiegazione

Il JDK comprende strumenti fondamentali per lo sviluppo Java, tra cui javac, java e Appletviewer. Un editor con debugger può far parte di un IDE, ma non costituisce l'insieme caratteristico indicato per il JDK.

8. Quale definizione descrive correttamente una classe nella programmazione a oggetti?

È un valore memorizzato per rappresentare una proprietà di un oggetto particolare.
È una singola operazione che modifica lo stato di un oggetto già esistente.
È un oggetto concreto e specifico creato durante l'esecuzione di un programma.
È un modello astratto e generico che descrive caratteristiche e comportamenti di una famiglia di oggetti.

È un modello astratto e generico che descrive caratteristiche e comportamenti di una famiglia di oggetti.

Spiegazione

Una classe definisce in modo astratto e generale le caratteristiche e i comportamenti condivisi da una famiglia di oggetti. L'oggetto concreto è invece un'istanza, mentre un'operazione o un valore rappresentano elementi più specifici della struttura.

9. Quale associazione tra elementi di un oggetto e loro funzione è corretta?

Gli attributi eseguono operazioni, mentre i metodi memorizzano le caratteristiche e lo stato.
Gli attributi descrivono caratteristiche o stato, mentre i metodi descrivono operazioni e comportamenti.
Gli attributi creano classi, mentre i metodi definiscono il processore su cui gira l'oggetto.
Gli attributi rappresentano l'interfaccia grafica, mentre i metodi compilano il programma sorgente.

Gli attributi descrivono caratteristiche o stato, mentre i metodi descrivono operazioni e comportamenti.

Spiegazione

Gli attributi rappresentano i dati, le caratteristiche o lo stato di un oggetto; i metodi rappresentano ciò che l'oggetto può fare. Attribuire agli attributi l'esecuzione delle operazioni e ai metodi la memorizzazione dello stato inverte i due concetti.

10. Quale forma esprime correttamente la dot notation per invocare un metodo?

<NomeOggetto>(<Metodo>.[ListaParametri])<NomeOggetto>(<Metodo>.[ListaParametri])
<Metodo>.<NomeOggetto>([ListaParametri])<Metodo>.<NomeOggetto>([ListaParametri])
[ListaParametri].<NomeOggetto>.<Metodo>[ListaParametri].<NomeOggetto>.<Metodo>
<NomeOggetto>.<Metodo>([ListaParametri])<NomeOggetto>.<Metodo>([ListaParametri])

$$<NomeOggetto>.<Metodo>([ListaParametri])$$

Spiegazione

La dot notation per chiamare un metodo colloca il nome dell'oggetto prima del punto e il metodo dopo il punto, seguito dai parametri tra parentesi. Le altre forme modificano l'ordine o la struttura della sintassi prevista.

11. Quale sequenza di comandi permette di compilare ed eseguire correttamente il file Java `Programma.java`?

`java Programma.java`, poi `javac Programma.class`
`java Programma.class`, poi `javac Programma.java`
`javac Programma.class`, poi `java Programma.java`
`javac Programma.java`, poi `java Programma`

`javac Programma.java`, poi `java Programma`

Spiegazione

Il comando `javac` compila il sorgente con estensione `.java`, mentre `java` avvia la classe senza indicare `.class`. Confondere i due comandi porta a usare `java` per la compilazione o a specificare un’estensione non prevista nell’esecuzione.

12. Quale descrizione identifica correttamente il metodo `main()` in un programma Java?

Converte automaticamente ogni variabile e può essere scritto fuori da una classe
Governa il flusso di esecuzione e appartiene a una classe principale
Gestisce soltanto i commenti e può essere dichiarato senza appartenere a una classe
Definisce i tipi delle variabili e viene richiamato dopo la conclusione del programma

Governa il flusso di esecuzione e appartiene a una classe principale

Spiegazione

Il metodo `main()` costituisce il punto di avvio e governa il flusso di esecuzione all’interno di una classe principale. Non è un elemento autonomo separato da una classe e non ha il compito specifico di convertire variabili o gestire commenti.

13. Quale regola sintattica è corretta in Java?

Ogni istruzione termina con parentesi tonde, mentre le graffe indicano i commenti
Le parentesi graffe chiudono ogni istruzione, mentre il punto e virgola delimita le classi
Il punto e virgola separa i metodi, mentre le parentesi graffe indicano i tipi numerici
Il punto e virgola chiude le istruzioni, mentre le parentesi graffe delimitano i blocchi

Il punto e virgola chiude le istruzioni, mentre le parentesi graffe delimitano i blocchi

Spiegazione

In Java il punto e virgola termina le istruzioni e le parentesi graffe racchiudono blocchi di classi, metodi o istruzioni. Le parentesi graffe non sostituiscono il punto e virgola nella chiusura delle singole istruzioni.

14. Una variabile dichiarata all’interno di un metodo è visibile dove e per quanto tempo?

Nella classe che la contiene, anche dopo la conclusione del metodo
In tutte le classi del programma, fino alla chiusura dell’applicazione
Nel metodo che la dichiara, fino al termine dell’esecuzione di quel metodo
Nel metodo chiamante, durante l’intera esecuzione della classe principale

Nel metodo che la dichiara, fino al termine dell’esecuzione di quel metodo

Spiegazione

Una variabile locale appartiene al metodo in cui è dichiarata, quindi la sua visibilità è limitata a quel metodo e viene deallocata quando esso termina. Una variabile locale non è accessibile da tutte le classi né dal metodo chiamante.

15. Quale insieme contiene categorie di costanti riconosciute da Java?

Intere, metodi, classi, blocchi, commenti, eccezioni e pacchetti
Stringhe, identificatori, parole chiave, costruttori, metodi e valori temporanei
Variabili locali, variabili globali, operatori, parentesi, istruzioni e classi
Intere, a virgola mobile, booleane, carattere, stringa, nulle e oggetti

Intere, a virgola mobile, booleane, carattere, stringa, nulle e oggetti

Spiegazione

Java riconosce costanti intere, a virgola mobile, booleane, carattere, stringa, nulle e oggetti. Metodi, classi, commenti e operatori sono elementi del programma, ma non costituiscono categorie di costanti.

16. Come deve essere scritto un valore decimale affinché possa essere assegnato direttamente a una variabile `float`?

Con il suffisso `d` o `D`, come in `180.50d`
Con il suffisso `f` o `F`, come in `180.50f`
Racchiudendolo tra virgolette, come in `"180.50"`
Anteponendo il simbolo `=`, come in `=180.50`

Con il suffisso `f` o `F`, come in `180.50f`

Spiegazione

Un letterale a virgola mobile è considerato `double` se non viene specificato diversamente; il suffisso `f` o `F` lo rende un `float`. Il suffisso `d` mantiene invece il tipo `double`, mentre le virgolette trasformano il valore in una stringa.

17. Quale differenza descrive correttamente gli operatori `=` e `==` in Java?

`=` confronta due valori, mentre `==` assegna il risultato alla variabile di sinistra
Entrambi confrontano valori, ma `==` restituisce un risultato numerico invece di booleano
`=` assegna un risultato, mentre `==` confronta due valori e restituisce un booleano
Entrambi assegnano valori, ma `=` opera sulle stringhe e `==` sui numeri

`=` assegna un risultato, mentre `==` confronta due valori e restituisce un booleano

Spiegazione

L’operatore `=` assegna alla variabile di sinistra il risultato dell’espressione a destra, mentre `==` verifica l’uguaglianza tra due valori e produce un booleano. Scambiarli confonde un’operazione di assegnazione con un confronto.

18. In che modo differiscono le forme prefissa e postfissa dell’operatore `++`?

La forma prefissa incrementa dopo l’uso del valore, quella postfissa prima
La forma prefissa assegna un valore, quella postfissa confronta due operandi
La forma prefissa incrementa prima dell’uso del valore, quella postfissa dopo
La forma prefissa agisce sulle stringhe, quella postfissa agisce sui valori booleani

La forma prefissa incrementa prima dell’uso del valore, quella postfissa dopo

Spiegazione

Con `++` prefisso l’operando viene modificato prima che il suo valore sia utilizzato nell’espressione; con `++` postfisso viene modificato dopo. La distinzione riguarda l’ordine tra modifica e utilizzo del valore, non il tipo di operando.

19. Quando il compilatore può eseguire automaticamente una conversione implicita tra tipi numerici?

Quando il tipo di destinazione è più piccolo del tipo di partenza
Quando entrambi i tipi sono incompatibili e richiedono un cast
Quando il tipo di destinazione è più grande del tipo di partenza
Quando il valore numerico è racchiuso tra virgolette doppie

Quando il tipo di destinazione è più grande del tipo di partenza

Spiegazione

La conversione implicita avviene automaticamente quando il valore passa verso un tipo più grande, così da evitare normalmente perdita di informazione. Il passaggio verso un tipo più piccolo richiede invece una conversione esplicita e può perdere dati.

20. Qual è il risultato dell’espressione Java `2 + "ab"`?

La stringa `"ab2"`
Un valore booleano che indica l’uguaglianza
La stringa `"2ab"`
Il numero intero `2`

La stringa `"2ab"`

Spiegazione

Quando un numero viene concatenato a una stringa, l’operazione produce una nuova stringa e il numero viene rappresentato come testo, ottenendo `"2ab"`. La presenza della stringa impedisce di trattare l’espressione come una semplice somma numerica.

21. Come viene valutata l’espressione `a - b + c` quando gli operatori hanno la stessa precedenza e non ci sono parentesi?

Dall’operatore più vicino alla variabile `a` verso il centro
Da destra a sinistra, calcolando prima `b + c`
In ordine alfabetico in base ai nomi delle variabili
Da sinistra a destra, calcolando prima `a - b`

Da sinistra a destra, calcolando prima `a - b`

Spiegazione

Gli operatori con la stessa precedenza vengono in generale valutati da sinistra a destra, quindi si calcola prima `a - b` e poi si aggiunge `c`. Le parentesi possono modificare questo ordine imponendo la valutazione delle espressioni più interne.

22. Quale affermazione descrive correttamente il funzionamento di `System.out.print()` e `System.out.println()`?

Leggono dalla tastiera una riga e la restituiscono come stringa tramite lo stream `in` di `System`.
Convertono i byte ricevuti da `System.in` in caratteri Unicode attraverso un buffer.
Visualizzano sul monitor il testo passato come parametro tramite lo stream `out` di `System`.
Importano automaticamente le classi necessarie per visualizzare testo nei programmi Java.

Visualizzano sul monitor il testo passato come parametro tramite lo stream `out` di `System`.

Spiegazione

Questi metodi visualizzano sul monitor il testo ricevuto come parametro usando lo stream `out` della classe `System`. La lettura dalla tastiera riguarda invece `System.in` e le classi di input, non i metodi di stampa.

23. Quale sequenza di operazioni consente di leggere una riga dalla tastiera in Java?

Creare un `BufferedReader` su `System.out`, costruire un `InputStreamReader` e invocare `print()`.
Creare un `InputStream` su `System.out`, costruire un `BufferedWriter` e invocare `readLine()`.
Creare un `FileReader` su `System.in`, costruire un `PrintWriter` e invocare `writeLine()`.
Creare un `InputStreamReader` su `System.in`, costruire un `BufferedReader` e invocare `readLine()`.

Creare un `InputStreamReader` su `System.in`, costruire un `BufferedReader` e invocare `readLine()`.

Spiegazione

La procedura prevista consiste nel collegare `System.in` a un `InputStreamReader`, usarlo per creare un `BufferedReader` e chiamare `readLine()`. Le altre sequenze confondono stream di input e output oppure usano classi e metodi non appropriati.

24. Che cosa sono i package Java e quale vantaggio offrono?

Sono file temporanei creati durante l'esecuzione che conservano i valori delle variabili del programma.
Sono insiemi organizzati di classi compilate che possono essere riutilizzate e riducono i conflitti tra nomi.
Sono blocchi di istruzioni eseguiti in sequenza che controllano il flusso e impediscono gli errori di sintassi.
Sono contenitori di dati inseriti dall'utente che trasformano automaticamente i valori in oggetti Java.

Sono insiemi organizzati di classi compilate che possono essere riutilizzate e riducono i conflitti tra nomi.

Spiegazione

I package raccolgono in modo organizzato classi già compilate, rendendole riutilizzabili e aiutando a evitare conflitti tra nomi. Non rappresentano né blocchi di controllo, né file temporanei, né contenitori per l'input.

25. Quale affermazione distingue correttamente `java.lang` e `java.io`?

`java.lang` è incluso automaticamente, mentre `java.io` va importato quando si usano le sue classi.
Entrambi i package devono essere importati manualmente prima di usare le loro classi.
`java.io` è incluso automaticamente, mentre `java.lang` va importato quando si usano le sue classi.
Entrambi i package sono inclusi automaticamente in ogni programma Java.

`java.lang` è incluso automaticamente, mentre `java.io` va importato quando si usano le sue classi.

Spiegazione

Il package `java.lang` viene incluso automaticamente, mentre le classi di `java.io` richiedono l'importazione quando vengono utilizzate. Confondere i due package porta ad applicare la regola di importazione al package sbagliato.

26. Quale situazione costituisce un'eccezione in un programma Java?

Un evento inusuale durante l'esecuzione che devia dal comportamento normale previsto.
Una dichiarazione di variabile conforme alla sintassi ma collocata all'inizio di un metodo.
Una fase di compilazione completata correttamente dopo il controllo del codice sorgente.
Un errore rilevato dal compilatore che impedisce la produzione del programma eseguibile.

Un evento inusuale durante l'esecuzione che devia dal comportamento normale previsto.

Spiegazione

Un'eccezione è un evento anomalo che si verifica mentre il programma è in esecuzione. Un errore di compilazione si manifesta invece prima dell'esecuzione e impedisce di compilare il programma.

27. In un costrutto `try-catch-finally`, quale ruolo svolge ciascun blocco?

`try` contiene il codice rischioso, `catch` gestisce l'eccezione prevista e `finally` esegue il codice previsto in ogni caso.
`try` chiude le risorse, `catch` ripete il codice fallito e `finally` sceglie quale eccezione generare.
`try` controlla la compilazione, `catch` converte i dati numerici e `finally` stampa il risultato dell'operazione.
`try` gestisce l'eccezione, `catch` contiene il codice rischioso e `finally` viene eseguito solo quando si verifica un errore.

`try` contiene il codice rischioso, `catch` gestisce l'eccezione prevista e `finally` esegue il codice previsto in ogni caso.

Spiegazione

Il blocco `try` racchiude il codice soggetto a eccezioni, `catch` contiene il recupero per il tipo indicato e `finally` svolge il codice previsto anche quando non si verifica un'eccezione. Il blocco `finally`, quindi, non è riservato ai soli casi di errore.

28. Come si converte correttamente un valore numerico letto dalla tastiera?

Si legge prima una stringa e poi si usa `Integer.parseInt()` per gli interi o `Float.parseFloat()` per i valori float.
Si legge prima un numero binario e poi si usa `BufferedReader.print()` per ottenere un intero o un float.
Si legge direttamente un carattere e poi si usa `System.out.println()` per trasformarlo in un intero o in un float.
Si legge una stringa e poi si usa `InputStreamReader.parseInt()` per gli interi o `Integer.parseFloat()` per i float.

Si legge prima una stringa e poi si usa `Integer.parseInt()` per gli interi o `Float.parseFloat()` per i valori float.

Spiegazione

L'input viene acquisito come stringa e convertito con il metodo coerente con il tipo richiesto: `Integer.parseInt()` per gli interi e `Float.parseFloat()` per i valori float. I metodi di stampa e le classi di lettura indicate nelle altre risposte non svolgono questa conversione.

29. Che cosa indica la clausola `throws` nella dichiarazione di un metodo?

Segnala le eccezioni che il metodo può generare ma che non gestisce al proprio interno.
Specifica i tipi numerici che il metodo deve convertire prima di restituire il risultato.
Indica le eccezioni che il metodo ha già catturato e trasformato in valori restituiti.
Dichiara che il metodo eseguirà il blocco `finally` prima di terminare la propria elaborazione.

Segnala le eccezioni che il metodo può generare ma che non gestisce al proprio interno.

Spiegazione

La clausola `throws` comunica al chiamante quali eccezioni possono essere generate senza essere gestite all'interno del metodo o della classe. Non indica eccezioni già catturate né controlla la conversione dei valori numerici.

30. Che cosa accade in un'istruzione `if-else` quando l'espressione condizionale è falsa?

Vengono eseguiti entrambi i blocchi nell'ordine in cui sono stati scritti.
La condizione viene rivalutata finché non assume valore vero.
Viene eseguito il blocco associato a `if`, perché la condizione è stata valutata.
Viene eseguito il blocco associato a `else`, se presente.

Viene eseguito il blocco associato a `else`, se presente.

Spiegazione

Quando la condizione dell'`if` è falsa, il controllo passa al blocco `else`, se questo è presente. Il ramo `if` viene invece eseguito quando l'espressione condizionale risulta vera.

31. Quale distinzione tra `==` e `=` è corretta in un'espressione Java?

Entrambi assegnano valori, ma `==` viene usato per eseguire un blocco condizionale.
Entrambi confrontano due valori, ma `=` consente anche di modificare il tipo della variabile.
`==` assegna un valore a una variabile, mentre `=` confronta due valori.
`==` confronta due valori, mentre `=` assegna un valore a una variabile.

`==` confronta due valori, mentre `=` assegna un valore a una variabile.

Spiegazione

L'operatore `==` verifica il confronto tra due valori, mentre `=` modifica il valore contenuto in una variabile tramite un'assegnazione. Scambiarli può produrre un errore logico nel controllo della condizione.

32. Che effetto ha l'assenza di `break` in un ramo di un'istruzione `switch`?

Dopo quel ramo possono essere eseguiti anche i blocchi successivi, senza un nuovo confronto con il valore esaminato.
Il ramo viene ignorato e il controllo passa direttamente alla condizione di un ciclo esterno.
Il programma esce immediatamente dallo `switch` e salta alla prima istruzione dopo il costrutto.
Il valore dell'espressione viene riassegnato alla variabile usata per selezionare il caso.

Dopo quel ramo possono essere eseguiti anche i blocchi successivi, senza un nuovo confronto con il valore esaminato.

Spiegazione

Senza `break`, l'esecuzione prosegue nei case successivi dopo quello selezionato, anche senza un nuovo confronto dell'espressione. L'istruzione `break` serve invece a uscire dallo `switch` dopo l'esecuzione del ramo.

33. Quale differenza caratterizza i cicli `while` e `do-while`?

`while` controlla la condizione prima del blocco e può eseguirlo zero volte; `do-while` la controlla dopo e lo esegue almeno una volta.
Entrambi controllano la condizione prima del blocco, ma `do-while` interrompe il ciclo quando la condizione diventa vera.
`while` controlla la condizione dopo il blocco e lo esegue almeno una volta; `do-while` la controlla prima e può saltarlo.
Entrambi controllano la condizione dopo il blocco, ma `while` ripete il codice e `do-while` lo esegue una sola volta.

`while` controlla la condizione prima del blocco e può eseguirlo zero volte; `do-while` la controlla dopo e lo esegue almeno una volta.

Spiegazione

Il ciclo `while` verifica la condizione prima di entrare nel blocco, quindi il blocco può non essere eseguito. Il ciclo `do-while` esegue prima il blocco e verifica poi la condizione, garantendo almeno un'esecuzione.

34. Quale caratteristica descrive correttamente un array in Java?

È un singolo valore composto da più variabili senza posizione numerica
È una classe che contiene metodi, ma non elementi accessibili tramite indice
È una raccolta non ordinata di elementi di tipi diversi, identificati da chiavi
È una sequenza ordinata di elementi dello stesso tipo, identificati da nome e indice

È una sequenza ordinata di elementi dello stesso tipo, identificati da nome e indice

Spiegazione

Un array è un insieme ordinato di elementi dello stesso tipo, accessibili tramite un nome e un indice. Una raccolta può gestire tipi diversi, ma questa non è la caratteristica di un array Java.

35. Quale sequenza di operazioni crea correttamente un array Java di cinque interi?

Indicare il numero di elementi nella dichiarazione, senza utilizzare new
Dichiarare soltanto il nome, perché lo spazio viene riservato automaticamente
Dichiarare il tipo e il nome, poi usare new con il numero di elementi
Usare new senza dichiarare il tipo e assegnare in seguito il nome dell’array

Dichiarare il tipo e il nome, poi usare new con il numero di elementi

Spiegazione

La creazione richiede la dichiarazione del tipo e del nome, seguita dall’uso di new per allocare lo spazio richiesto. La sola dichiarazione identifica la variabile, ma non alloca l’array in memoria.

36. Dato un array Java creato con cinque elementi, quale accesso è fuori dai limiti validi?

L’accesso all’elemento con indice 5
L’accesso all’elemento con indice 2
L’accesso all’elemento con indice 0
L’accesso all’elemento con indice 4

L’accesso all’elemento con indice 5

Spiegazione

Gli indici di un array di cinque elementi vanno da 0 a 4, quindi l’indice 5 non è valido e genera ArrayIndexOutOfBounds. Gli altri indici appartengono all’intervallo consentito.

37. Che cosa indica la proprietà length di un array Java?

L’indice dell’ultimo elemento disponibile nell’array
Il numero di elementi attualmente valorizzati dall’utente
Il numero di elementi contenuti nell’array dopo la sua creazione
La quantità di memoria che può essere aggiunta all’array

Il numero di elementi contenuti nell’array dopo la sua creazione

Spiegazione

La proprietà length contiene il numero di elementi dell’array. Non rappresenta l’ultimo indice, che è inferiore di uno, e non può essere usata per ridimensionare l’array.

38. Quale affermazione descrive correttamente le stringhe Java?

String è un tipo primitivo e il suo contenuto cambia a ogni assegnazione
String è una classe e i suoi oggetti non cambiano contenuto dopo l’inizializzazione
String è una classe i cui oggetti modificano direttamente il proprio contenuto
String è un array di caratteri che non possiede metodi propri

String è una classe e i suoi oggetti non cambiano contenuto dopo l’inizializzazione

Spiegazione

In Java String è una classe e i suoi oggetti sono immutabili: il contenuto non cambia dopo l’inizializzazione. StringBuffer, invece, è progettata per modificare direttamente il contenuto dell’oggetto.

39. Quale coppia di metodi permette di ottenere, rispettivamente, la lunghezza di una stringa e il carattere in una posizione?

count() e getChar(int pos)
size() e characterAt(int pos)
length e charAt()
length() e charAt(int pos)

length() e charAt(int pos)

Spiegazione

Per le stringhe, length() restituisce il numero di caratteri e charAt(int pos) restituisce il carattere nella posizione indicata. La proprietà length appartiene agli array, mentre size() e gli altri nomi proposti non svolgono queste funzioni.

40. Come si comportano indexOf() e lastIndexOf() nella ricerca all’interno di una stringa?

Restituiscono rispettivamente il numero di occorrenze e la lunghezza della stringa
Cercano rispettivamente l’ultima e la prima posizione e restituiscono 0 se falliscono
Confrontano due stringhe e restituiscono true quando il contenuto coincide
Cercano rispettivamente la prima e l’ultima posizione e restituiscono -1 se non trovano il testo

Cercano rispettivamente la prima e l’ultima posizione e restituiscono -1 se non trovano il testo

Spiegazione

indexOf() individua la prima posizione, mentre lastIndexOf() individua l’ultima; entrambi restituiscono -1 quando la ricerca non ha esito. Il valore 0 indica invece una posizione valida, non un fallimento della ricerca.

41. Quale metodo deve essere usato per confrontare il contenuto di due stringhe Java?

length()
indexOf()
equals()
charAt()

equals()

Spiegazione

equals() confronta il contenuto delle due stringhe. length() misura la lunghezza, charAt() accede a un carattere e indexOf() cerca una posizione, quindi non svolgono il confronto completo del contenuto.

42. Dove devono essere contenute le istruzioni di un programma Java?

All’interno di classi, generalmente organizzate in metodi quando rappresentano operazioni
Direttamente nel programma, senza dover appartenere a una classe
Nel package, senza inserirle nella definizione di una classe
All’interno degli attributi, perché i metodi servono soltanto a descrivere dati

All’interno di classi, generalmente organizzate in metodi quando rappresentano operazioni

Spiegazione

In Java funzioni, istruzioni e programmi devono essere contenuti all’interno di classi, mentre i metodi possono contenere i blocchi di istruzioni. Gli attributi rappresentano dati e il package organizza classi, ma nessuno dei due sostituisce la classe.

43. Che cosa sono gli attributi di una classe Java?

Variabili dichiarate nella classe e fuori dai metodi, proprie degli oggetti creati
Parametri passati a un metodo, usati per controllare le chiamate
Variabili dichiarate dentro un metodo, valide durante l’esecuzione di quel metodo
Istruzioni del metodo, memorizzate nella classe come dati dell’oggetto

Variabili dichiarate nella classe e fuori dai metodi, proprie degli oggetti creati

Spiegazione

Gli attributi sono variabili dichiarate nella classe e fuori dai metodi; ogni oggetto può possedere i propri valori. Le variabili locali, invece, sono dichiarate dentro un metodo e hanno visibilità limitata al suo blocco.

44. Quale distinzione tra variabili locali e variabili di istanza è corretta?

Le locali appartengono al metodo e terminano con esso; quelle di istanza appartengono all’oggetto e persistono con l’istanza
Le locali appartengono alla classe e persistono nell’oggetto; quelle di istanza terminano alla fine del metodo
Le locali sono condivise tra gli oggetti; quelle di istanza sono visibili soltanto durante una chiamata
Le locali sono dichiarate fuori dai metodi; quelle di istanza vengono dichiarate dentro il metodo

Le locali appartengono al metodo e terminano con esso; quelle di istanza appartengono all’oggetto e persistono con l’istanza

Spiegazione

Una variabile locale è visibile nel metodo in cui viene dichiarata e cessa di esistere quando il metodo termina. Una variabile di istanza appartiene all’oggetto, può avere valori diversi per ogni istanza e dura quanto l’istanza stessa.

45. Quale livello di visibilità consente l’accesso a un membro da qualsiasi classe?

package
private
public
protected

public

Spiegazione

Un membro public è accessibile da qualsiasi classe. private limita l’accesso alla classe che lo dichiara, protected riguarda sottoclassi e classi dello stesso package, mentre package vale per le classi dello stesso package in assenza di una parola chiave.

46. Quale sequenza di istruzioni crea correttamente un oggetto della classe `Conto` separando dichiarazione e allocazione?

`Conto c; c = Conto.new();`
`Conto c; c = new Conto();`
`new c = Conto();`
`Conto c = Conto();`

`Conto c; c = new Conto();`

Spiegazione

La variabile viene prima dichiarata con il tipo della classe e poi collegata a un’istanza allocata tramite `new` e il costruttore. La dichiarazione da sola non crea l’oggetto, mentre le altre forme non rispettano la sintassi prevista.

47. Quale caratteristica distingue correttamente un costruttore da un metodo ordinario?

Ha il nome della classe e inizializza l’istanza
È dichiarato `static` e opera sulla classe
Restituisce un valore e modifica un attributo
Ha un nome libero e calcola un risultato

Ha il nome della classe e inizializza l’istanza

Spiegazione

Il costruttore deve avere lo stesso nome della classe e serve ad allocare lo spazio e inizializzare gli attributi dell’istanza. Un metodo ordinario esegue invece un’operazione sull’oggetto e non è definito da questa caratteristica nominale.

48. Quando un oggetto invia un messaggio a un altro oggetto, che cosa specifica la notazione puntata?

La visibilità, l’attributo e il numero dell’istanza
La classe, il costruttore e il valore restituito
Il tipo primitivo, l’array e la variabile locale
Il destinatario, il metodo e i parametri

Il destinatario, il metodo e i parametri

Spiegazione

Un messaggio identifica l’oggetto destinatario, il metodo da attivare e gli eventuali parametri, secondo la notazione puntata. Gli altri elementi possono comparire nella programmazione a oggetti, ma non definiscono il contenuto essenziale del messaggio.

49. Che cosa verifica l’operatore `==` quando viene applicato a due variabili che riferiscono oggetti?

Se i due oggetti hanno attributi con valori uguali
Se i due oggetti appartengono a classi differenti
Se le due variabili contengono lo stesso riferimento
Se i due riferimenti puntano ad attributi privati

Se le due variabili contengono lo stesso riferimento

Spiegazione

Con gli oggetti, `==` confronta i riferimenti e restituisce `true` quando le variabili indicano la stessa istanza. Due oggetti distinti possono avere contenuti uguali senza soddisfare questo confronto.

50. Quale descrizione identifica correttamente la classe `Vettore`?

Gestisce una lista di stringhe senza operazioni di ricerca
Memorizza dati pubblici e offre soltanto una visualizzazione
Incapsula un array privato e fornisce operazioni sugli interi
Rappresenta un singolo intero tramite metodi statici

Incapsula un array privato e fornisce operazioni sugli interi

Spiegazione

La classe `Vettore` contiene un array privato di interi e mette a disposizione metodi per inizializzazione, visualizzazione, ricerca e somma. Le altre descrizioni cambiano il tipo di dati o omettono le operazioni fondamentali della classe.

51. Quale sequenza descrive il programma di prova della classe `Vettore`?

Crea un vettore di 10 elementi e usa il secondo per memorizzare stringhe
Crea due vettori di 10 elementi e li ordina senza calcolarne la somma
Crea un vettore di 5 elementi, lo ricerca e poi elimina quello principale
Crea un vettore di 10 elementi, lo gestisce e poi ne crea uno di 5

Crea un vettore di 10 elementi, lo gestisce e poi ne crea uno di 5

Spiegazione

Il programma crea un vettore di 10 elementi, lo riempie, ne visualizza il contenuto, cerca un elemento e calcola la somma, quindi gestisce un secondo vettore di 5 elementi. Le altre sequenze modificano dimensioni o operazioni indicate.

52. Quale effetto produce l’information hiding sugli attributi e sull’implementazione di un oggetto?

Sostituisce gli attributi privati con variabili condivise dalla classe
Nasconde i dettagli interni e li rende accessibili tramite metodi `public`
Rende tutti gli attributi visibili e limita l’uso dei metodi
Permette di modificare direttamente l’implementazione dall’esterno

Nasconde i dettagli interni e li rende accessibili tramite metodi `public`

Spiegazione

L’information hiding nasconde attributi e implementazione interna, esponendo all’esterno i metodi `public` dell’interfaccia. Rendere gli attributi direttamente visibili contraddice invece il principio di incapsulamento.

53. Quale proprietà distingue una variabile di classe da una variabile di istanza?

È pubblica, indipendente dalla classe e specifica per ogni oggetto
È `static`, condivisa dalle istanze e utilizzabile senza oggetti
È privata, legata a un oggetto e inizializzata dal costruttore
È locale a un metodo e ricreata a ogni chiamata

È `static`, condivisa dalle istanze e utilizzabile senza oggetti

Spiegazione

Una variabile di classe è dichiarata `static`, quindi il suo valore è condiviso da tutte le istanze e può essere usata tramite la classe. Una variabile di istanza appartiene invece a una singola istanza.

54. Come si richiama un metodo di classe dichiarato `static`?

Tramite il costruttore, passando tutti gli attributi
Tramite una variabile locale, dopo aver creato un array
Tramite un riferimento all’istanza che contiene il metodo
Tramite il nome della classe, senza creare un oggetto

Tramite il nome della classe, senza creare un oggetto

Spiegazione

Un metodo di classe è `static` e può essere richiamato usando direttamente il nome della classe, senza istanziare un oggetto. Il costruttore e il riferimento a un’istanza riguardano invece la gestione degli oggetti.

55. Quale valore restituisce il fattoriale calcolato con la relazione Fatt(x)=x×Fatt(x−1)Fatt(x)=x\times Fatt(x-1) per x>1x>1?

Fatt(4)=12Fatt(4)=12
Fatt(4)=8Fatt(4)=8
Fatt(4)=24Fatt(4)=24
Fatt(4)=16Fatt(4)=16

$$Fatt(4)=24$$

Spiegazione

Applicando la relazione ricorsiva e il caso base Fatt(0)=1Fatt(0)=1 si ottiene Fatt(4)=4×3×2×1=24Fatt(4)=4\times3\times2\times1=24. Il valore 1616 deriva da una moltiplicazione incompleta o da una regola diversa dal fattoriale.

56. Quale caratteristica descrive correttamente l’ereditarietà tra classi in Java?

Una sottoclasse riceve soltanto i metodi statici e può avere diverse superclassi dirette
Una sottoclasse riceve attributi e metodi dalla superclasse e ogni classe ha al massimo una superclasse
Una superclasse eredita gli attributi dalla sottoclasse e ogni classe deve avere due superclassi
Una classe eredita comportamenti da altre classi senza poter aggiungere proprie caratteristiche

Una sottoclasse riceve attributi e metodi dalla superclasse e ogni classe ha al massimo una superclasse

Spiegazione

L’ereditarietà costruisce gerarchie in cui la sottoclasse riceve attributi e metodi dalla superclasse, con ereditarietà singola per le classi Java. La possibilità di implementare più interfacce non implica che una classe possa avere più superclassi.

57. Che cosa distingue l’overriding dall’estensione di una classe?

L’overriding aggiunge attributi alla superclasse, mentre l’estensione modifica la segnatura di un metodo ereditato
L’overriding crea una nuova gerarchia, mentre l’estensione elimina l’implementazione del metodo ereditato
L’overriding ridefinisce un metodo con la stessa segnatura, mentre l’estensione aggiunge nuovi elementi
L’overriding introduce parametri diversi, mentre l’estensione sostituisce ogni comportamento della superclasse

L’overriding ridefinisce un metodo con la stessa segnatura, mentre l’estensione aggiunge nuovi elementi

Spiegazione

L’overriding sostituisce l’implementazione ereditata mantenendo la stessa segnatura, mentre l’estensione arricchisce la sottoclasse con metodi o attributi nuovi. Aggiungere parametri diversi non costituisce l’overriding del metodo originario.

58. Quale affermazione descrive una classe astratta in Java?

Raccoglie soltanto costanti e può essere istanziata senza creare una sottoclasse
Definisce una classe priva di metodi e deve essere dichiarata come final
Rappresenta una classe concreta i cui oggetti vengono creati tramite il costruttore
Raccoglie caratteristiche comuni e non può essere istanziata direttamente

Raccoglie caratteristiche comuni e non può essere istanziata direttamente

Spiegazione

Una classe astratta, dichiarata con `abstract`, raccoglie caratteristiche condivise ma non può essere istanziata direttamente. Una classe concreta, invece, può creare oggetti secondo i propri costruttori.

59. In che modo il polimorfismo può manifestarsi in una gerarchia di classi?

Richiedendo che ogni metodo abbia un nome diverso nelle classi della gerarchia
Limitando l’uso dei metodi alle superclassi prive di implementazioni concrete
Imponendo a tutte le sottoclassi la stessa implementazione e gli stessi parametri
Permettendo implementazioni diverse dello stesso metodo o lo stesso nome con parametri differenti

Permettendo implementazioni diverse dello stesso metodo o lo stesso nome con parametri differenti

Spiegazione

Il polimorfismo consente a un metodo di avere implementazioni diverse nelle classi della gerarchia e comprende anche l’uso dello stesso nome con parametri differenti. Rendere identiche tutte le implementazioni eliminerebbe proprio questa flessibilità.

60. Quale caratteristica identifica correttamente un’interfaccia Java?

Definisce una superclasse concreta i cui costruttori vengono ereditati dalle classi implementatrici
Contiene variabili di istanza e può essere istanziata direttamente per creare oggetti
Raccoglie metodi astratti e costanti e può essere implementata da una classe senza avere variabili di istanza
Raccoglie esclusivamente metodi statici e impedisce a una classe di aggiungere altri comportamenti

Raccoglie metodi astratti e costanti e può essere implementata da una classe senza avere variabili di istanza

Spiegazione

Un’interfaccia raccoglie metodi astratti e costanti e permette a una classe di aggiungere comportamenti senza introdurre variabili di istanza nell’interfaccia. Inoltre, un’interfaccia non può essere istanziata direttamente, a differenza di una classe concreta.

61. Quale intervallo descrive i valori restituiti da `Math.random()`?

Un valore xx tale che 0≤x<10\le x<1
Un valore xx tale che 0<x≤10<x\le 1
Un valore intero xx compreso tra 00 e 11
Un valore xx tale che −1≤x≤1-1\le x\le 1

Un valore $$x$$ tale che $$0\le x<1$$

Spiegazione

`Math.random()` restituisce un valore xx nell’intervallo 0≤x<10\le x<1. Il valore può essere frazionario e il limite superiore 11 non è incluso.

62. Quale effetto ha la parola chiave `final` nei diversi elementi Java?

Rende statico un attributo, pubblico un metodo o concreta una classe
Rende privato un attributo, astratto un metodo o istanziabile una classe
Rende non modificabile un attributo, non ridefinibile un metodo o non estendibile una classe
Rende modificabile un attributo, ereditabile un metodo o estendibile una classe

Rende non modificabile un attributo, non ridefinibile un metodo o non estendibile una classe

Spiegazione

`final` impedisce la modifica di un attributo, l’overriding di un metodo o la creazione di sottoclassi per una classe. Non indica invece automaticamente visibilità, staticità o natura astratta.

63. Quale funzione svolge la garbage collection in Java?

Recupera automaticamente la memoria degli oggetti non più accessibili o utilizzabili
Modifica i valori degli oggetti ancora accessibili per ridurre lo spazio occupato
Alloca manualmente memoria per ogni oggetto creato dal programmatore
Trasforma gli oggetti inutilizzati in classi involucro per conservarne i dati

Recupera automaticamente la memoria degli oggetti non più accessibili o utilizzabili

Spiegazione

La garbage collection individua gli oggetti non più accessibili o utilizzabili e recupera automaticamente la memoria che occupano. Non serve ad allocare manualmente gli oggetti né a trasformarne il tipo.

64. Quale espressione calcola l’ipotenusa di un triangolo rettangolo con cateti `Cateto1` e `Cateto2`?

Cateto12+Cateto22Cateto1^2 + Cateto2^2
Cateto1+Cateto2\sqrt{Cateto1 + Cateto2}
Cateto12+Cateto22\sqrt{Cateto1^2 + Cateto2^2}
Cateto1×Cateto2Cateto1 \times Cateto2

$$\sqrt{Cateto1^2 + Cateto2^2}$$

Spiegazione

Per il teorema di Pitagora, l’ipotenusa si ottiene come radice quadrata della somma dei quadrati dei due cateti. La somma senza radice e il prodotto non rappresentano questa lunghezza.

65. Per quale motivo la classe `Math` non può essere estesa?

Perché è dichiarata `abstract`, quindi può essere usata soltanto come superclasse
Perché appartiene a `java.lang`, quindi non può partecipare all’ereditarietà
Perché contiene metodi statici, che impediscono di creare qualsiasi gerarchia
Perché è dichiarata `final`, quindi non può avere sottoclassi

Perché è dichiarata `final`, quindi non può avere sottoclassi

Spiegazione

La dichiarazione `final` impedisce a una classe di essere superclasse e quindi vieta la creazione di sottoclassi. La presenza di metodi statici o l’appartenenza a `java.lang` non determina questo vincolo.

66. Come si invoca il metodo statico `ipotenusa()` della classe `NuovaMath`?

Usando `new NuovaMath().ipotenusa()` dopo aver creato necessariamente un oggetto
Usando `NuovaMath->ipotenusa()` tramite un operatore di riferimento agli oggetti
Usando `ipotenusa.NuovaMath()` attraverso il nome del metodo come classe
Usando `NuovaMath.ipotenusa()` senza creare un oggetto

Usando `NuovaMath.ipotenusa()` senza creare un oggetto

Spiegazione

Un metodo statico appartiene alla classe e può essere chiamato tramite il nome della classe, come `NuovaMath.ipotenusa()`, senza istanziare oggetti. La creazione di un oggetto è invece associata all’uso di membri di istanza.

67. Qual è la differenza tra costruttore e metodo distruttore nella gestione di un oggetto?

Il costruttore rende statici i metodi, mentre il distruttore impedisce la modifica degli attributi
Il costruttore recupera memoria inutilizzata, mentre il distruttore assegna valori iniziali agli attributi
Il costruttore alloca e inizializza l’oggetto, mentre il distruttore svolge azioni finali prima della deallocazione
Il costruttore ridefinisce metodi ereditati, mentre il distruttore crea la gerarchia della classe

Il costruttore alloca e inizializza l’oggetto, mentre il distruttore svolge azioni finali prima della deallocazione

Spiegazione

Il costruttore prepara l’oggetto allocando e inizializzando la memoria, mentre il distruttore riguarda le azioni finali prima della deallocazione. Il recupero automatico della memoria è invece collegato alla garbage collection.

Ripassa con le flashcard

Memorizza le risposte con 93 flashcard su Costanti operatori e gestione Java.

Che tipo di linguaggio è Java?

Un linguaggio orientato agli oggetti, general purpose e interpiattaforma.

Chi ha creato Java e quando?

Sun Microsystems verso la metà degli anni Novanta.

Perché Java è definito interpiattaforma?

Perché può essere eseguito senza modifiche su piattaforme diverse con JVM.

Vedi le flashcard →

Studia il riassunto

Leggi il riassunto completo su Costanti operatori e gestione Java.

Vedi il riassunto →

Corsi simili

Crea i tuoi quiz

Importa il tuo corso e l'IA genera quiz corretti in 30 secondi.

Generatore di quiz