









































Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
ARGOMENTI: • Il Formato JAR • Risoluzione dei problemi più comuni • Stringhe di caratteri • Concatenazione di Stringhe • Confronto tra Stringhe • Elaborazioni di Stringhe • Caratteri di Escape • Le Stringhe come Oggetti Immutabili • Passaggio dei Parametri (tipi primitivi vs oggetti) • Memorizzare una Data (classe Date) • SimpleDateFormat • classe Calendar • Confronto tra Date (compareTo, equals, before, after) • Librerie Standard di Java (API e Package) • Come funzionano: import e java.lang • Documentazione Java API • Risoluzione di Conflitti tra Librerie • Input e Output in Java: il concetto di Stream • Input da tastiera: la classe Scanner • Output a video: System.out e sequenze di escape • Input da file: Scanner + File • Output su file: PrintWriter • Classe Math • Esponenziale – Math.pow() • Valore Assoluto – Math.abs() • Minimo e Massimo – Math.min() / Math.max() • Arrotondamento – Math.round(), Math.floor(), Math.ceil() • Radice Quadrata – Math.sqrt() • Altri metodi utili
Tipologia: Schemi e mappe concettuali
1 / 49
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!










































1. Cosa sono le Librerie Standard di Java
Java include una vastissima raccolta di classi già pronte all'uso, nota come API (Application Programming Interface). Questa libreria standard è uno dei principali punti di forza del linguaggio: fornisce strumenti per affrontare le più disparate esigenze di programmazione senza dover reinventare la ruota.
Le classi della libreria standard sono organizzate in package (e sotto-package), che funzionano come cartelle che raggruppano classi logicamente correlate. I package assolvono a tre funzioni fondamentali:
Package Contenuto Classi di esempio
java.lang Classi^ fondamentali^ del^ linguaggio (importate automaticamente)
String, System, Math, Object
java.util (^) Classi di utilità generale Date,^ Calendar, Scanner, ArrayList
java.io (^) Input/Output su file e stream File,^ FileReader, BufferedReader
java.net (^) Connessioni di rete Socket,^ URL, HttpURLConnection
java.text (^) Formattazione di testo e numeri SimpleDateFormat, NumberFormat
java.awt / javax.swing Interfacce grafiche desktop^
JFrame, JButton, JTextField
2. Come Funzionano le Librerie Standard
Per poter usare una classe di libreria è necessario prima importarla nel proprio file sorgente, tramite la parola chiave import in cima al file.
Esistono due modalità:
// Importazione di una singola classe import java.util.Date;
// Importazione di tutte le classi di un package (wildcard ) import java.util.;
Una volta importata, una classe di libreria si usa esattamente come una classe creata da noi: nessuna differenza sintattica o operativa.
Classi fondamentali come String , System , Math e Object vengono usate in ogni programma Java senza mai scrivere un import esplicito. Il motivo è che appartengono al package java.lang , che la JVM importa automaticamente in ogni file sorgente.
Regola: java.lang è il solo package importato automaticamente dalla JVM. Tutti gli altri package — incluso java.util — richiedono un import esplicito.
3. Documentazione Java API
La documentazione ufficiale Java (Javadoc) descrive in modo completo tutti i package, le classi e i metodi disponibili nella libreria standard. È la risorsa di riferimento per ogni programmatore Java.
Le pagine di documentazione sono organizzate in tre aree principali:
Area Contenuto
Pannello in alto a sinistra Elenco di tutti i package disponibili nella libreria standard.
Pannello in basso a sinistra
Elenco delle classi contenute nel package selezionato.
Pannello centrale Descrizione dettagliata del package o della classe selezionata.
1 Fare clic sul nome del package nel pannello in alto a sinistra.
Nel pannello in basso a sinistra compariranno tutte le classi di quel package. Fare clic sul nome della classe cercata.
Nel pannello centrale apparirà la documentazione completa della classe selezionata.
Sezione Descrizione
Nome, package di appartenenza, gerarchia delle classi, modalità di utilizzo e implementazione.
Field Summary Elenco degli attributi (campi) della classe con tipo, visibilità e breve descrizione.
Method Summary Elenco dei metodi con tipo di ritorno e descrizione sintetica.
4. Risoluzione di Conflitti tra Librerie
Può accadere che classi diverse abbiano lo stesso nome ma rappresentino concetti completamente diversi. Ad esempio, una classe Articolo potrebbe esistere sia in un package negozio sia in un package giornale. In Java questo non è un problema: i package permettono a entrambe le classi di coesistere.
Se si importano entrambi i package con il wildcard ***** e si prova poi a istanziare un oggetto della classe ambigua, il compilatore genera un errore perché non sa quale delle due versioni usare:
import sport.; import veicoli.;**
// ERRORE DI COMPILAZIONE: The type Golf is ambiguous Golf g = new Golf();
Errore tipico: importare due package con il wildcard (*) che contengono classi con lo stesso nome produce un errore di ambiguità al momento dell'istanziazione.
La soluzione più semplice è non usare import e specificare sempre il percorso completo della classe. In questo caso gli import non sono necessari:
// Nessun import necessario sport.Golf golf1 = new sport.Golf(); veicoli.Golf golf2 = new veicoli.Golf();
// Funziona anche per i metodi statici sport.Golf.selezionaMazza(); veicoli.Golf.getPotenza();
Se una delle due classi è usata più frequentemente, si può importarla con il nome semplice e riferirsi all'altra con il percorso completo:
import sport.Golf; // importata: si usa con nome semplice
// La classe importata si usa normalmente Golf golf1 = new Golf();
// L'altra si riferisce con percorso completo veicoli.Golf golf2 = new veicoli.Golf();
Riepilogo
Concetto Spiegazione sintetica
API / Libreria standard Raccolta di classi già implementate, pronte all'uso, organizzate in package.
Package Raggruppamenti logici di classi correlate; equivalenti a cartelle nel filesystem.
import Parola chiave per rendere disponibile una classe di libreria nel file corrente.
java.lang Unico package importato automaticamente; contiene String, System, Math, ecc.
Javadoc Documentazione ufficiale navigabile per package, classe e metodo.
Conflitto di nomi Risolto usando il fully qualified name (percorso.Package.Classe) oppure importando una sola delle classi ambigue.
Una variabile String non è una variabile semplice come int ; è un oggetto appartenente alla classe String. Gli oggetti possiedono metodi e dati.
I metodi della classe String consentono di elaborare i dati stringa. La maggior parte restituisce un valore. Per esempio, il metodo length() restituisce il numero di caratteri:
String saluto = "Ciao"; int n = saluto.length(); // restituisce 4
2. Concatenazione di Stringhe
Due stringhe possono essere unite per formare una stringa più lunga. Questa operazione è detta concatenazione e in Java viene effettuata con l'operatore +. Quando applicato alle stringhe, questo operatore è chiamato operatore di concatenamento.
String nome = "Mario"; String cognome = "Rossi"; String nomeCompleto = nome + cognome; // "MarioRossi" Nessuno spazio viene aggiunto automaticamente. Per separare con uno spazio:
String nomeCompleto = nome + " " + cognome; // "Mario Rossi"
L'operatore + può concatenare una stringa con qualsiasi altro tipo di oggetto; il risultato è sempre una String. Java converte automaticamente il valore nell'equivalente stringa:
String risposta = "La risposta è " + 54; // Java converte 54 in "54", risultato: "La risposta è 54"
3. Confronto tra Stringhe
Per confrontare due stringhe si possono utilizzare tre metodi diversi, in base alle esigenze.
Controlla se due stringhe sono esattamente identiche. Restituisce true se sono uguali, false altrimenti:
String strA = "Ciao Mondo"; String strB = "Ciao Mondo"; boolean confronto = strA.equals(strB); // true
Il metodo equals() è sensibile alle maiuscole/minuscole. Se le stringhe sono uguali ma hanno case diverso, restituisce false:
String strA = "Ciao Mondo"; String strB = "ciao mondo"; boolean c1 = strA.equals(strB); // false boolean c2 = strA.equalsIgnoreCase(strB); // true Il metodo equalsIgnoreCase() ignora la distinzione tra maiuscole e minuscole.
Permette di stabilire l'ordine alfabetico tra due stringhe. Restituisce un valore intero:
Vediamo i principali metodi per elaborare stringhe: estrarre sottostringhe, cercarle, sostituirle, convertire maiuscolo/minuscolo e rimuovere spazi.
Il metodo substring() estrae una porzione della stringa. Accetta uno o due parametri (gli indici partono da 0):
Ecco i principali caratteri speciali che devono essere rappresentati con una sequenza di escape:
Sequenza Descrizione
' Apice singolo (delimitatore di char in Java)
" Doppio apice (delimitatore di String in Java)
\r Ritorno carrello (spesso accoppiato con \n)
\n Nuova riga (daccapo)
\t Tab orizzontale
\ Backslash letterale
Il carattere \n provoca un'andata a capo nella posizione in cui compare:
System.out.println("La vita è \nBELLA"); Produce l'output:
La vita è BELLA
Per includere un backslash letterale occorrono due backslash. La stringa "nato\a" visualizza:
nato\a
Ogni sequenza di escape rappresenta un solo carattere , anche se è scritta con due simboli. Questo è fondamentale per calcolare correttamente la lunghezza di una stringa e gestire gli indici.
Riepilogo dei metodi della classe String
Ecco una tabella riepilogativa dei principali metodi trattati in questo modulo:
Metodo Descrizione length() Numero di caratteri della stringa substring(inizio) Sottostringa dall'indice inizio fino alla fine substring(inizio, fine) Sottostringa da inizio fino a fine (escluso) indexOf(str) Indice della prima occorrenza di str (-1 se assente) lastIndexOf(str) Indice dell'ultima occorrenza di str (-1 se assente)
equals(str) true se le due stringhe sono identiche
equalsIgnoreCase(str) true ignorando maiuscole/minuscole
compareTo(str) Confronto alfabetico (negativo, 0 o positivo)
replace(old, new) Sostituisce tutte le occorrenze di old con new
replaceFirst(old, new) Sostituisce solo la prima occorrenza
toUpperCase() Converte tutte le lettere in maiuscolo
toLowerCase() Converte tutte le lettere in minuscolo
trim() Rimuove spazi iniziali e finali
charAt(indice) Carattere alla posizione indicata
1. Le Stringhe come Oggetti Immutabili
In Java le stringhe sono oggetti immutabili. Un oggetto si definisce immutabile se il suo stato — e quindi il suo valore — non può essere modificato dopo che è stato creato. Di conseguenza, gli oggetti di tipo String non possono essere alterati una volta istanziati.
Consideriamo il seguente frammento di codice:
String saluto = "Ciao"; saluto = "Hello";
Intuitivamente sembrerebbe che la stringa "Ciao" venga modificata e sovrascritta con "Hello". In realtà non è così. Ecco cosa accade internamente:
Regola fondamentale: nessun metodo della classe String modifica l'oggetto su cui è chiamato. Ogni operazione (substring, toUpperCase, replace, ecc.) restituisce SEMPRE un nuovo oggetto String, lasciando l'originale intatto.
L'immutabilità è spesso fonte di bug subdoli. Osserva il codice seguente:
String testo = "Arcobaleno"; testo.substring(0, 3); // risultato IGNORATO System.out.println(testo); // stampa: Arcobaleno
Attenzione: l'output è "Arcobaleno" perché il risultato di substring() non viene assegnato a nessuna variabile. Il metodo produce un nuovo oggetto "Arc", ma tale oggetto viene immediatamente scartato.
La versione corretta è:
String testo = "Arcobaleno"; testo = testo.substring(0, 3); // riassegna il risultato System.out.println(testo); // stampa: Arc
In questo caso la variabile testo abbandona il riferimento all'oggetto "Arcobaleno" e punta al nuovo oggetto "Arc" creato da substring(). L'oggetto precedente verrà eliminato dal garbage collector.
L'output è 18 perché il metodo cambiaValore() riceve una copia del valore intero. La riga var = 45 modifica solo la copia locale, senza alcun effetto sulla variabile originale nel main.
3. Il Comportamento Anomalo delle Stringhe nei Metodi
Le stringhe sono oggetti, quindi ci si aspetterebbe che — come tutti gli oggetti — le modifiche effettuate all'interno di un metodo siano visibili anche nel chiamante. In realtà, a causa della loro immutabilità , le stringhe si comportano diversamente.
Consideriamo lo stesso esempio precedente, ma con una variabile di tipo String invece di int :
public class Parametri { public static void main(String[] args) { String var = "Ciao"; cambiaValore(var); System.out.println(var); // stampa: Ciao } public static void cambiaValore(String var) { var = "Hello"; // crea un nuovo oggetto, non modifica l'originale } }
Risultato sorprendente: l'output è "Ciao", NON "Hello"! Anche se String è un oggetto (e ci aspetteremmo un passaggio per riferimento), la stringa originale non viene modificata.
Ecco perché avviene questo comportamento, passo per passo:
Nel main , la variabile var è un riferimento che punta all'oggetto String "Ciao" in memoria.
Quando si chiama cambiaValore(var) , Java passa al metodo una copia del riferimento. Ora esistono due riferimenti distinti che puntano entrambi al medesimo oggetto "Ciao".
All'interno di cambiaValore() , l'istruzione var = "Hello" crea un nuovo oggetto String con valore "Hello" e fa puntare la copia locale del riferimento a questo nuovo oggetto.
Il riferimento originale nel main rimane invariato: continua a puntare all'oggetto "Ciao". Nulla di ciò che è accaduto dentro il metodo ha toccato quell'oggetto.