Java Flashcards
Cos’è Java?
Java è un ecosistema composto dal linguaggio di programmazione generico utilizzato per lo sviluppo web, la Java Virtual Machine (JVM), un ambiente di esecuzione virtuale, il Java Runtime Environment (JRE), un ambiente runtime, e il Java Development Kit (JDK), il componente principale dell’ambiente Java che contiene JRE insieme al compilatore Java, al debugger Java e ad altre classi.
Perché Java è un linguaggio indipendente dalla piattaforma?
Il linguaggio di programmazione Java è stato sviluppato in modo tale da non dipendere da alcun hardware o software. Ciò è possibile grazie al compilatore Java che compila il codice e lo converte in codice byte eseguibile su diversi sistemi a prescindere dalla piattaforma. Infatti l’unico requisito per far girare il codice byte è aver installato sulla macchina l’ambiente di runtime JRE.
Perché Java non è un linguaggio ad oggetti puro?
Java non è un linguaggio di pura OP, ma un linguaggio orientato agli oggetti, ad esempio perché i valori dei tipi primitivi non sono oggetti (byte, boolean, char, short, int, float, long e double)
Java utilizza i puntatori?
No, per vari motivi: I puntatori sono complicati, il che va contro il principio di Java sulla semplicità del codice. L’uso dei puntatori può anche causare potenziali errori, oltre a compromettere la sicurezza (con l’aiuto dei puntatori gli utenti possono accedere direttamente alla memoria). Java usa i riferimenti al posto dei puntatori, perché i riferimenti non possono essere manipolati.
Cos’è il compilatore JIT?
Il compilatore Just in Time (JIT) viene usato per convertire insieme le parti del bytecode che hanno funzionalità simili, e quindi ridurre la quantità di tempo necessaria per la compilazione. In questo modo le prestazioni aumentano quasi al livello di una compilazione in linguaggio macchina.
Che differenza c’è tra una variabile locale e una variabile di istanza?
Le variabili di istanza (instance variable) descrivono le proprietà di un oggetto e sono vincolate ad esso. Dichiarate all’interno della classe e all’esterno dei metodi, sono variabili accessibili da tutti i metodi della classe.
Le variabili locali (local variable) sono presenti all’interno di un blocco, funzione o costruttore, e la loro visibilità è limitata all’ambito del blocco. Infatti gli altri metodi della classe non hanno alcuna conoscenza della variabile locale dichiarata all’interno di un metodo.
Cosa significa il motto di Java “WORA (write once and run anywhere)”?
Write Once and Run Anywhere fa riferimento alla natura indipendente da piattaforma di Java. Infatti il compilatore Java converte i programmi Java nel bytecode, il linguaggio intermedio tra il codice sorgente e il codice macchina. Il bytecode non è specifico della piattaforma, e quindi può essere eseguito su qualsiasi computer, da qui il motto ‘scrivi una volta, esegui ovunque’.
L’ordine dei modificatori d’accesso ha importanza in Java?
No: un programma Java viene compilato ed eseguito correttamente a prescindere dall’ordine usato.
Cosa sono i modificatori di accesso?
In Java, i modificatori di accesso sono parole chiave usate per definire l’ambito di accesso del metodo, della classe o di una variabile.
Quali sono i modificatori di accesso di Java?
Nel linguaggio Java ci sono quattro identificatori di accesso per metodi, classi e variabili:
pubblico, ovvero accessibile da qualsiasi classe o metodo
protetto, ovvero accessibile solo dalla classe dello stesso package, o dalla sottoclasse di questa classe, o all’interno della stessa classe
default, ovvero accessibile solo all’interno del package (è l’impostazione predefinita di tutti i metodi, classi e variabili)
privato, ovvero accessibile solo all’interno della classe.
Cos’è una Classe (Class)?
In Java, una classe è un modello o blueprint che definisce le proprietà (variabili) e i
comportamenti (metodi) di un oggetto. Una classe funge da struttura di base per creare
oggetti concreti.
Cos’è un Oggetto (Object)?
L’Oggetto in Java è una istanza della classe, l’entità unitaria con stato e comportamento definiti a priori. Gli stati degli oggetti sono veicolati dagli attributi (o variabili) di istanza, mentre i metodi ne stabiliscono il comportamento. L’oggetto viene solitamente creato con la keyword ‘new’.
A cosa serve la garbage collection in Java?
L’obiettivo principale di questo processo è ottimizzare l’uso delle risorse di memoria, eliminando tutto ciò che non serve. Dunque la garbage collection libera lo spazio di memoria occupato da oggetti non necessari e irraggiungibili durante l’esecuzione del programma.
Cos’è l’ereditarietà (inheritance)?
L’ereditarietà è uno dei quattro concetti fondamentali della programmazione orientata agli oggetti, insieme a incapsulamento, polimorfismo e astrazione. Ereditarietà in Java significa che una classe può estendersi a un’altra classe, consentendo di riutilizzare il codice da una classe all’altra. La classe esistente viene chiamata superclasse mentre quella derivata è chiamata sottoclasse.
Cos’è l’incapsulamento (encapsulation)?
L’incapsulamento è uno dei quattro concetti fondamentali della programmazione orientata agli oggetti, insieme a ereditarietà, polimorfismo e astrazione. L’incapsulamento in Java è un meccanismo che riunisce in una singola unità i dati (variabili) e il codice che agisce sui dati (metodi). Allo stesso tempo, si tratta di una procedura di sicurezza, perché le variabili di una classe sono nascoste alle altre classi, e l’accesso è consentito solo tramite i metodi della loro classe corrente. Sostanzialmente impedisce l’accesso ai dati da parte del codice al di fuori di questa capsula. Questo concetto viene chiamato anche occultamento dei dati.
Cos’è il poliformismo (polymorphism)?
Il polimorfismo è uno dei quattro concetti fondamentali della programmazione orientata agli oggetti, insieme a ereditarietà, incapsulamento e astrazione. Il polimorfismo di per sé è la capacità di un oggetto di assumere molte forme. In Java, questo indica la possibilità di eseguire la stessa azione in molti modi diversi, ovvero consente di definire un’interfaccia e avere più implementazioni.
Cos’è l’astrazione?
L’astrazione è uno dei quattro concetti fondamentali della programmazione orientata agli oggetti, insieme a ereditarietà, incapsulamento e polimorfismo. In Java l’astrazione consiste nello scegliere i dati da un insieme più ampio per mostrare all’utente solo i dettagli rilevanti dell’oggetto. Significa mostrare solo gli attributi essenziali e nascondere le informazioni non necessarie, per ridurre la complessità di programmazione.
Quanti tipi di polimorfismo ci sono in Java?
Ci sono due tipi di polimorfismo in Java: polimorfismo in fase di compilazione e polimorfismo in fase di esecuzione.
Il polimorfismo in fase di compilazione (compile time polymorphism) è anche noto come polimorfismo statico. Questo tipo di polimorfismo si ottiene con l’overload di metodi.
Il polimorfismo in fase di esecuzione (runtime polymorphism) viene chiamato anche polimorfismo dinamico o dynamic method dispatch. Si ottiene quando una chiamata ad un metodo overriden viene risolta in fase di runtime.