Riassunto: Costanti operatori e gestione Java

Schema del Corso

  1. Caratteristiche e portabilità di Java
  2. Applicazioni e ambienti di sviluppo
  3. Oggetti e struttura dei programmi
  4. Sintassi, compilazione e variabili
  5. Costanti e operatori Java
  6. Conversioni e precedenza
  7. Input output e package
  8. Gestione delle eccezioni
  9. Strutture di controllo
  10. Array e matrici
  11. Metodi sulle stringhe
  12. Classi, attributi e metodi
  13. Oggetti, costruttori e interazione
  14. Classe Vettore e interazione
  15. Incapsulamento e metodi statici
  16. Ereditarietà e polimorfismo
  17. Interfacce API e memoria
  18. Classe NuovaMath e metodo statico

1. Caratteristiche e portabilità di Java

Concetti chiave e definizioni

  • Java: un linguaggio di programmazione orientato agli oggetti, general purpose e interpiattaforma, creato da Sun Microsystems verso la metà degli anni Novanta e oggi mantenuto da Oracle.
  • Bytecode: un insieme di istruzioni simili al linguaggio macchina ma indipendenti da uno specifico processore, destinato all'esecuzione sulla Java Virtual Machine.

★ Da sapere

📌 Un linguaggio multipiattaforma può richiedere ricompilazione e modifiche al codice per ogni nuova piattaforma, mentre Java è interpiattaforma perché può essere eseguito senza modifiche su piattaforme diverse dotate di JVM.

  • Il compilatore Java traduce il programma sorgente in bytecode, la JVM interpreta il bytecode e lo esegue sulla macchina reale della piattaforma specifica.

Approfondimenti

  • Java può avere prestazioni inferiori su computer molto datati perché ogni istruzione bytecode viene interpretata dalla JVM prima dell'esecuzione sulla macchina reale.

Trucco mnemonico

Java interpiattaforma senza porting, C multipiattaforma con porting

2. Applicazioni e ambienti di sviluppo

Concetti chiave e definizioni

  • JDK: cioè Java Software Development Kit, è l'ambiente che contiene il compilatore Java javac, l'interprete java e l'Appletviewer per provare le applet.
  • IDE: cioè Integrated Development Environment, integra strumenti di sviluppo come editor e debugger e può appartenere alla categoria degli ambienti RAD, ovvero Rapid Application Development.

★ Da sapere

📌 Le applicazioni a console usano un'interfaccia testuale, mentre le applicazioni GUI usano elementi grafici come mouse, pulsanti, menu e campi di testo.

📌 Le applicazioni e le apps sono programmi eseguiti direttamente attraverso la JVM, mentre le applet vengono eseguite all'interno di un browser.

Approfondimenti

  • NetBeans ed Eclipse sono IDE per Java; Eclipse è un progetto open source usato anche per altri linguaggi e rappresenta l'ambiente standard nel mondo delle apps per Android.

3. Oggetti e struttura dei programmi

Concetti chiave e definizioni

  • Classe: un modello astratto e generico che descrive le caratteristiche comuni e i comportamenti di una famiglia di oggetti.

★ Da sapere

📌 Un'istanza, o oggetto, è un rappresentante concreto e specifico di una classe, mentre la classe descrive genericamente gli elementi della famiglia.

📌 Gli attributi descrivono le caratteristiche o lo stato di un oggetto, mentre i metodi descrivono le operazioni e i comportamenti che l'oggetto può compiere.

Approfondimenti

📐 Formula - La dot notation per riferirsi a una proprietà usa la forma <NomeOggetto>.<Proprietaˋ><NomeOggetto>.<Proprietà>.

📐 Formula - La dot notation per invocare un metodo usa la forma <NomeOggetto>.<Metodo>([ListaParametri])<NomeOggetto>.<Metodo>([ListaParametri]).

Trucco mnemonico

La classe è uno stampo astratto, l'oggetto è il prodotto concreto

4. Sintassi, compilazione e variabili

Concetti chiave e definizioni

  • main: il metodo che governa il flusso di esecuzione del programma e deve essere contenuto in una classe principale.
  • Variabile locale: è dichiarata all'interno di un metodo, è visibile solo in quel metodo e viene deallocata al termine della sua esecuzione.

★ Da sapere

  • Per compilare ed eseguire un programma Java si salva il sorgente con estensione .java, si compila con javac e si avvia il risultato con java senza specificare l'estensione .class.

📌 In Java ogni istruzione deve terminare con un punto e virgola, mentre le parentesi graffe delimitano i blocchi di classi, metodi o istruzioni.

📌 Prima di essere utilizzata, una variabile Java deve essere inizializzata assegnandole un valore; la dichiarazione specifica il tipo e il nome della variabile.

Approfondimenti

📌 I commenti /commento/ possono estendersi su più righe, mentre i commenti //commento valgono dalla doppia barra fino alla fine della riga.

  • I tipi primitivi Java sono:
    • int
    • short
    • long
    • byte
    • boolean
    • char
    • float
    • double

📌 Le costanti a virgola mobile sono considerate di tipo double se non diversamente specificato; per assegnarle a una variabile float occorre aggiungere il suffisso f o F, come in 180.50f.

Trucco mnemonico

Sorgente .java → javac → bytecode .class → java → JVM

5. Costanti e operatori Java

Concetti chiave e definizioni

  • Operatori: simboli che specificano come devono essere manipolati gli operandi e producono sempre un risultato

★ Da sapere

  • Java riconosce le seguenti costanti:

    • intere
    • a virgola mobile
    • booleane
    • carattere
    • stringa
    • nulle
    • oggetti
  • Le costanti a virgola mobile sono considerate di tipo double se non viene specificato diversamente; per assegnarle a un float bisogna aggiungere il suffisso f o F, come in 180.50f.

  • L'operatore di assegnazione = assegna alla variabile di sinistra il risultato dell'espressione a destra, mentre l'operatore relazionale == confronta due valori e restituisce un booleano.

  • Gli operatori ++ e -- possono essere prefissi o postfissi: nella forma prefissa modificano l'operando prima di usarne il valore, mentre nella forma postfissa lo modificano dopo averne usato il valore.

  • Gli operatori && e || sono cortocircuitati e non valutano l'operando destro quando il risultato è già determinato dall'operando sinistro.

  • L'operatore ternario ha sintassi Expression1 ? Expression2 : Expression3 e restituisce Expression2 se la condizione booleana è vera, altrimenti Expression3.

Approfondimenti

  • La divisione tra due variabili int produce un risultato intero, mentre il resto della divisione tra interi è restituito dall'operatore %.

  • Lo shift a destra di n posizioni equivale in pratica a dividere il valore per 2n2^n, mentre lo shift a sinistra di n posizioni equivale a moltiplicarlo per 2n2^n.

Trucco mnemonico

= assegna, == confronta

6. Conversioni e precedenza

Concetti chiave e definizioni

  • Conversione implicita: eseguita automaticamente dal compilatore quando a una variabile viene attribuito un valore di tipo diverso e il tipo di arrivo è più grande di quello di partenza
  • Casting esplicito: Il casting esplicito converte un valore mediante la sintassi (nometipo) valore_da_convertire e può causare perdita di informazione.

★ Da sapere

📌 Un valore int, float o double concatenato a una stringa produce una stringa, come nell'espressione 2+"ab", il cui risultato è "2ab".

  • Per convertire una stringa in un numero si usano parseInt(), parseFloat() o parseDouble(), mentre per convertire un numero in stringa si usa String.valueOf().

📌 Se un'espressione contiene operatori con la stessa precedenza, in generale vengono valutati da sinistra a destra; le parentesi tonde possono modificare l'ordine e le espressioni più interne vengono valutate per prime.

Approfondimenti

  • Convertendo il float 15.45 in int con (int) X, il risultato è 15 perché vengono eliminate le cifre decimali.

Trucco mnemonico

Tipo più grande → conversione implicita; tipo più piccolo → casting esplicito

7. Input output e package

Concetti chiave e definizioni

  • Package Java: insiemi organizzati di classi già compilate che possono essere utilizzate nei programmi e riducono i conflitti tra nomi di classi

★ Da sapere

  • System.out.print() e System.out.println() visualizzano sul monitor il testo passato come parametro attraverso lo stream out della classe System.

  • Per leggere una riga dalla tastiera si crea un InputStreamReader su System.in, si crea un BufferedReader usando tale oggetto e si invoca readLine().

  • Il package java.lang è incluso automaticamente, mentre java.io contiene le classi per la gestione dei file e dei flussi di input e output.

Approfondimenti

  • System.in supporta direttamente solo i byte; InputStreamReader li converte in caratteri UNICODE a 16 bit e BufferedReader compone i caratteri in stringhe.

📌 L'istruzione import java.awt.* importa le classi direttamente contenute in java.awt, ma non importa automaticamente i package annidati come java.awt.event.

Trucco mnemonico

System.in → InputStreamReader → BufferedReader → readLine()

8. Gestione delle eccezioni

Concetti chiave e definizioni

  • Eccezione: un evento inusuale che si verifica durante l'esecuzione di un programma al di fuori del comportamento normale e desiderato

★ Da sapere

  • 🔄 La gestione standard di un'eccezione comprende: eseguire il codice soggetto a eccezioni nel blocco try, eseguire il codice di recupero nel blocco catch, eseguire comunque il blocco finally, se presente

  • Un blocco try contiene il codice soggetto a eccezioni, mentre uno o più blocchi catch contengono il codice da eseguire per i diversi tipi di eccezione.

  • Per leggere un valore numerico da tastiera si legge prima una stringa e poi la si converte con Integer.parseInt() per gli interi o Float.parseFloat() per i valori float.

📌 La clausola throws segnala accanto al metodo o alla classe le eccezioni che possono essere generate ma non sono gestite al suo interno.

Approfondimenti

  • La clausola finally viene generalmente usata per rilasciare risorse esterne o chiudere un file aperto, indipendentemente dal verificarsi di un'eccezione.

  • Alcune eccezioni Java riguardano:

    • IOException: input e output di dati
    • ArrayIndexOutOfBounds: accesso oltre la dimensione massima di un array
    • FileNotFound: lettura di un file inesistente
    • EOFException: lettura oltre la fine di un file

📌 Quando lo stesso codice può sollevare più tipi di eccezione, si utilizzano più blocchi catch, uno per ciascun tipo da gestire.

  • Il programma LeggiStringa usa BufferedReader.readLine() nel blocco try e, in caso di errore, visualizza il messaggio «lettura non andata a buon fine» nel blocco catch.

Trucco mnemonico

try → catch → finally

9. Strutture di controllo

Concetti chiave e definizioni

  • Istruzione if-else: esegue un blocco quando l’espressione condizionale è true e, se la condizione è false, esegue il blocco else

★ Da sapere

  • L’operatore == confronta due valori nelle espressioni condizionali, mentre l’operatore = assegna un valore a una variabile; confonderli produce un errore logico.

  • Nell’istruzione switch, break fa uscire dal costrutto dopo l’esecuzione del case, mentre la sua assenza provoca l’esecuzione dei blocchi successivi indipendentemente dal valore dell’espressione.

  • Il ciclo while valuta la condizione prima del blocco e può quindi eseguirlo zero volte, mentre do-while valuta la condizione dopo il blocco e lo esegue almeno una volta.

  • Il ciclo for esegue nell’ordine l’inizializzazione, il controllo della condizione, il blocco di istruzioni e l’espressione di fine blocco, ripetendo poi il controllo della condizione.

Approfondimenti

📌 L’istruzione break interrompe il ciclo e salta alla prima istruzione successiva, mentre continue interrompe l’iterazione corrente e passa a quella successiva.

Trucco mnemonico

while controlla in testa, do-while controlla in coda

10. Array e matrici

Concetti chiave e definizioni

  • Array: un insieme ordinato di elementi dello stesso tipo, identificati mediante un nome e un indice
  • Array multidimensionale: ottenuto dichiarando array di array; un array a due dimensioni rappresenta comunemente una matrice

★ Da sapere

  • Per creare un array si dichiara il tipo e il nome, si usa new indicando il numero di elementi e, se necessario, si inizializzano gli elementi.

  • Gli array Java usano indici a partire da 0 e un array di 5 elementi ha quindi indici da 0 a 4; l’accesso a animali[5] genera un’eccezione ArrayIndexOutOfBounds.

  • La proprietà length contiene il numero di elementi dell’array e non può essere usata per modificarne la dimensione dopo la creazione.

Approfondimenti

  • I valori predefiniti sono:
    • 0 per i valori numerici
    • false per i valori booleani
    • **0** per i caratteri
    • null per gli oggetti

Trucco mnemonico

Una matrice come una griglia di righe e colonne indicizzate da zero

11. Metodi sulle stringhe

Concetti chiave e definizioni

  • String: una classe e le stringhe sono oggetti immutabili, il cui contenuto non cambia dopo l’inizializzazione
  • substring: Il metodo substring(int begin, int end) restituisce la sottostringa dalla posizione begin inclusa alla posizione end esclusa, mentre substring(int begin) restituisce i caratteri da begin fino alla fine.
  • StringBuffer: StringBuffer è una classe che permette di modificare direttamente una stringa mediante metodi come setCharAt(), setLength(), insert() e append().

★ Da sapere

  • Il metodo length() restituisce la lunghezza di una stringa e charAt(int pos) restituisce il carattere presente nella posizione indicata.

  • I metodi indexOf() e lastIndexOf() cercano rispettivamente la prima e l’ultima posizione di un carattere o di una stringa, restituendo -1 se la ricerca fallisce.

📌 Il metodo equals() confronta il contenuto di due stringhe, mentre gli operatori relazionali non devono essere usati per confrontare le stringhe.

Approfondimenti

📌 I metodi replace(), toLowerCase() e toUpperCase() restituiscono una nuova stringa modificata, perché gli oggetti String originali sono immutabili.

Trucco mnemonico

String è immutabile, StringBuffer è modificabile

12. Classi, attributi e metodi

Concetti chiave e definizioni

  • Attributi: variabili dichiarate nella classe e fuori dai metodi; sono anche chiamati variabili di istanza perché ogni oggetto possiede i propri valori
  • Metodo: caratterizzato da un nome, dai parametri, dal tipo di valore restituito, dal livello di visibilità, dal blocco di istruzioni e dall'ambiente locale

Punti essenziali

📌 In Java funzioni, istruzioni e programmi devono essere contenuti all'interno di classi.

📌 Le variabili locali sono visibili solo nel metodo in cui sono dichiarate e cessano di esistere quando il metodo termina, mentre le variabili di istanza appartengono alla classe, possono avere valori diversi in ogni oggetto e persistono per tutta la vita dell'istanza.

  • I livelli di visibilità Java sono: public, accessibile da qualsiasi classe, private, accessibile solo dalla classe, protected, accessibile dalle sottoclassi e dalle classi dello stesso package, package, accessibile dalle sole classi dello stesso package

📌 La parola chiave void indica che un metodo non restituisce valori, mentre l'istruzione return restituisce eventualmente un valore e termina l'esecuzione del metodo.

Trucco mnemonico

Variabili locali dentro i metodi, variabili istanza nella classe

13. Oggetti, costruttori e interazione

Concetti chiave e definizioni

  • Metodo costruttore: ha necessariamente lo stesso nome della classe e serve ad allocare lo spazio e inizializzare gli attributi dell'istanza
  • Segnatura di un metodo: costituita dal suo nome, dal numero e dal tipo dei parametri
  • Oggetto corrente this: un riferimento all'oggetto corrente e permette di distinguere un attributo da un parametro locale con lo stesso nome
  • Overloading dei costruttori: la presenza nella stessa classe di più costruttori con lo stesso nome ma con numero o tipo di parametri diverso

★ Da sapere

  • La creazione di un oggetto avviene dichiarando una variabile del tipo della classe e allocando l'istanza con new seguito dal costruttore, oppure combinando le due operazioni in un'unica istruzione.

  • Gli oggetti comunicano tramite messaggi che specificano l'oggetto destinatario, il metodo da attivare e i parametri da passare, usando la notazione puntata.

📌 I tipi primitivi sono generalmente passati ai metodi per valore, mentre array e oggetti sono passati per riferimento, cioè tramite una copia del riferimento allo stesso oggetto.

📌 L'operatore == confronta i riferimenti degli oggetti e restituisce true quando due variabili contengono lo stesso riferimento, non quando due oggetti distinti hanno lo stesso contenuto.

Approfondimenti

  • Se una classe non specifica un costruttore, Java le associa un costruttore vuoto di default che non esegue operazioni alla creazione dell'oggetto.

  • Una variabile oggetto dichiarata ma non ancora allocata contiene il valore null, che indica che non fa riferimento ad alcun oggetto.

📌 Per leggere o modificare in modo controllato gli attributi si usano metodi Get() e Set(), soprattutto quando gli attributi hanno visibilità private.

Trucco mnemonico

new crea l'istanza → i messaggi attivano i suoi metodi

14. Classe Vettore e interazione

Concetti chiave e definizioni

  • Classe Vettore: incapsula un array privato di interi e offre metodi per inizializzarlo, visualizzarlo, cercare un elemento e calcolarne la somma.

★ Da sapere

  • 🔄 Il programma di prova esegue queste operazioni:
    1. crea un vettore di 10 elementi
    2. riempie il vettore
    3. visualizza il contenuto
    4. ricerca un elemento e calcola la somma
    5. crea e gestisce un vettore di 5 elementi

Approfondimenti

  • Il costruttore Vettore(int n) crea un array di n elementi e assegna n al numero massimo di elementi del vettore.

  • La classe Vettore può essere estesa con metodi per ordinare gli elementi in ordine crescente e per eseguire la ricerca sequenziale o binaria.

Trucco mnemonico

Crea → riempi → visualizza → ricerca

15. Incapsulamento e metodi statici

Concetti chiave e definizioni

  • Information hiding: nasconde gli attributi e l'implementazione interna di un oggetto, rendendo accessibili dall'esterno soltanto i metodi public della sua interfaccia.
  • Variabile di classe: un attributo dichiarato static il cui valore è condiviso da tutte le istanze della classe e può essere usato anche senza creare istanze.
  • Metodo di classe: un metodo dichiarato static che può essere richiamato tramite il nome della classe senza creare un oggetto.

★ Da sapere

📐 Formula - Per un intero non negativo, il fattoriale soddisfa Fatt(0)=1Fatt(0)=1 e Fatt(x)=x×Fatt(x−1)Fatt(x)=x\times Fatt(x-1) per x>1x>1.

Approfondimenti

📌 La ricorsione richiama lo stesso metodo durante la propria esecuzione, mentre l'iterazione ripete le istruzioni mediante una struttura come while.

Trucco mnemonico

public comunica, private nasconde

16. Ereditarietà e polimorfismo

Concetti chiave e definizioni

  • Ereditarietà: consente di creare gerarchie nelle quali una sottoclasse riceve attributi e metodi dalla superclasse; in Java ogni classe ha al massimo una superclasse.
  • Classe astratta: dichiarata con abstract, raccoglie caratteristiche comuni ma non può essere istanziata.
  • Polimorfismo: permette a un metodo di assumere implementazioni diverse nelle classi della gerarchia o di avere lo stesso nome con parametri differenti.
  • Metodo astratto: possiede una segnatura ma non un'implementazione e deve essere ridefinito dalle sottoclassi concrete.

Punti essenziali

📌 L'overriding ridefinisce nella sottoclasse un metodo con la stessa segnatura della superclasse, mentre l'estensione aggiunge nuovi metodi o attributi.

Trucco mnemonico

Eredita → ridefinisce → estende

17. Interfacce API e memoria

Concetti chiave e definizioni

  • Interfaccia: una collezione di metodi astratti e costanti che può essere implementata da una classe per aggiungere comportamenti, senza contenere variabili di istanza.
  • Garbage collection: la procedura automatica con cui il sistema recupera la memoria occupata da oggetti non più accessibili o utilizzabili.

★ Da sapere

  • La classe Math appartiene a java.lang, contiene metodi e costanti statici e include Math.random(), che restituisce un valore x tale che 0≤x<10\le x<1.

📌 Un attributo final non può essere modificato, un metodo final non può essere ridefinito e una classe final non può avere sottoclassi.

Approfondimenti

  • La classe Object è la superclasse di tutte le classi Java, mentre Integer, Float e Double sono classi involucro dei tipi primitivi.

Trucco mnemonico

Classe astratta parzialmente implementata, interfaccia solo contratto

18. Classe NuovaMath e metodo statico

Concetti chiave e definizioni

  • Garbage collection: l'insieme delle procedure automatiche che individuano e recuperano le aree di memoria non più accessibili o occupate da oggetti non più utilizzabili
  • NuovaMath: una nuova classe che può contenere metodi matematici aggiuntivi, come il metodo statico Ipotenusa

★ Da sapere

📐 Formula - Il calcolo dell'ipotenusa di un triangolo rettangolo con cateti Cateto1 e Cateto2 restituisce Cateto12+Cateto22\sqrt{Cateto1^2 + Cateto2^2}.

  • La classe Math è dichiarata final, quindi non può essere estesa creando sottoclassi.

  • Un metodo statico può essere chiamato usando il nome della classe, come NuovaMath.ipotenusa(), senza creare oggetti della classe.

  • Il costruttore alloca e inizializza la memoria di un oggetto, mentre il metodo distruttore svolge le azioni finali prima della sua deallocazione.

  • 🔄 Il recupero di un oggetto non più referenziato avviene così: non esiste più alcun riferimento all'oggetto, l'oggetto viene contrassegnato per la rimozione, la memoria viene resa nuovamente disponibile al sistema

📌 Il metodo distruttore finalize(), ereditato da java.lang.Object, viene chiamato automaticamente dalle procedure di garbage collection per rimuovere gli oggetti non più utilizzati.

  • Le conoscenze del blocco tematico comprendono:

    • gli oggetti necessari a scrivere GUI in Java
    • il modello Java per la gestione degli eventi
    • i concetti legati alla gestione della grafica
  • 🔄 Le funzionalità grafiche di Java si studiano in questa sequenza:

    1. le interfacce utente grafiche
    2. la gestione degli eventi
    3. la grafica

Approfondimenti

📌 Se finalize() viene ridefinito, è conveniente chiamare super.finalize() prima della chiusura del metodo per non perdere le azioni previste dalla superclasse.

  • Il metodo finalize() può chiudere file aperti, pulire variabili ed eliminare riferimenti ad altri oggetti prima della rimozione dell'oggetto.

Trucco mnemonico

Math è final e non si estende; NuovaMath raccoglie i nuovi metodi.

Tabelle di sintesi

Cicli iterativi

CostruttoControlloEsecuzione minima
whileIn testaZero volte
do-whileIn codaUna volta
forCondizione tra inizializzazione e aggiornamentoDipende dalla condizione

Variabili locali e variabili di istanza

AspettoVariabile localeVariabile di istanza
DichiarazioneDentro un metodoNella classe, fuori dai metodi
VisibilitàSolo nel metodoAssociata all'istanza
DurataFino alla fine del metodoPer tutta la vita dell'istanza

Metti alla prova le tue conoscenze

Mettiti alla prova su Costanti operatori e gestione Java con 67 domande a risposta multipla e correzioni spiegate.

1. Quale descrizione identifica correttamente Java?

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

Fai il quiz →

Ripassa con le flashcard

Memorizza i concetti chiave di Costanti operatori e gestione Java con 93 flashcard interattive.

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 →

Corsi simili

Crea i tuoi riassunti

Importa il tuo corso e l'IA genera riassunto, quiz e flashcard in 30 secondi.

Generatore di riassunti