Java è un linguaggio di programmazione ad alto livello con una piattaforma indipendente dall'architettura fisica e dai sistemi operativi.
Platform independent: La stessa appliazione puo' essere eseguta su piattaforme differenti.
High Performance: JIT (Just In Time compiler) il bytecode viene covertito in linguaggio macchina ede eseguito sulla JVM.
Multi-threaded: JVM crea il main thread e lo svilupptore puo' creare thred multipli implementando l'interfacci "Runnable".
Concetti Oops (Object Orientend Programming & System):
i seguneti concetti sono correlato con il significato di "costruttore":
Le "variabili locali" sono definite nei metodi e hanno lo scope (visibilita') all'interno del metodo stesso
Le "variabili di classe" (instance) sono defini fuori dai metodi ed hanno visibilità in tutta la classe.
Una classe è il contenitore di tutto il codice Java, contiene le variabili ed i metodi
Le variabili sono gli attributi che definiscono lo stato di una classe.
Nei metodi metodi viene definita la logica di business, possono contenere i cambi di stato o specifiche azioni (scri su db, stampa pdf).
L'instanza ,new, di una classe è chiamato oggetto, un oggetto ha uno stao e dei comportamenti (behavior).
L'ereditarieta' permette ad una classe di estendere una altra classe, in modo da riutilizzare lo stesso codice.
Super class: public class Manupulation(){ } Sub class: public class Addition extends Manipulation(){ }
Una classe puo' essere estesa solo se deifinita 'public' o 'protected', le classi definite 'private' non possono essere ereditate.
Lo scopo dell'Encapsulation:
public class Addition(){ private int a = 5; //Here the variable is marked as private get A(){ a } set A(int a){ if(a>0){// Here condition is applied ......... } } }
Il polimorfismo indichera' l’attitudine di un oggetto a mostrare piu' implementazioni per una singola funzionalità
class Albero { protected void cresce() { System.out.println("Metodo cresce della classe Albero"); } public static void main(String args[]) { Albero al = new Abete(); al.cresce(); } } class Abete extends Albero { public void cresce() { System.out.println("Metodo cresce della classe Abete"); } } Output del programma Metodo cresce della classe Abete
Uno dei maggiori benefici del polimorfismo e' la facilità di manutenzione del codice. Nel caso dell'esempio si potrebbe definire una nuova classe "Pino" o "Quercia"
L'overriding di un metodo viene fatto da una sub class sul metodo del super classe e rispetta le seguenti regole:
L'overloading di un metodo della stessa classe o di una super classe ha le seguenti regole:
Nota: il poliformismo non e' applicabile all'overloading.
In Java non è consentita l'ereditarieta' multipla, si argina la cosa con l'introduzione del concetto di interfaccia.
Una interfaccia e' un template con la sola dichiarazione dei metodi e NON la loro implementazione.
Public abstract interface IManupulation{ //Interface declaration Public abstract void add();//method declaration public abstract void subtract(); }
Una classe viene definita astratta inserendo la parola chiave "Abstract" prima del nome della classe, puo' contenere sia metodi astratti che non.
Un metodo che viene dichiarato astratto non ha implementazione
public abstract class Manupulation{ public abstract void add();//Abstract method declaration Public void subtract(){ } }
La classe che estende una classe astratta deve implementare i metodi astratti.
Array | Array List |
La dimensione va definita al momento della creazione (String[] name = new String[2]) | Ha dimensione dinamica (ArrayList name = new ArrayList) |
Per inserire un elemento bisogna specificare l'index (name[1] = “book”) | L'inserimento non e' posizionale (name.add(“book”)) |
Non e' parametrizzato per tipo | E' parametrizzato per tipo da java 5 |
String | String Buffer | String Builder |
La stinga è immutabile, se definisco String name = "book"; il dato viene immagazzinato nella "constant string pool", se cambio valore name ="pippo" il valore viene affiancato a quello precedente in memoria | lo string buffer e' thread safe e mette il dato in uno stack (pila) , alla sua modifica sovrascive l'area di memomoria | lo string builder NON e' thread safe e mette il dato in uno stack, alla sua modifica sovrascive l'area di memomoria |
Definiamo come menbri di una classe sia le variabili che i metodi
Private | Public | Protected | Default |
Se un membro di una classe e' definito private e' visibile sono nella classe stessa | Se un membro di una classe e definito public e' visibile nella classe stessa, dalle classi dello stesso package e da quelle di altri package | Se un membro di una classe e definito protected e' visibile nella classe stessa dalle classi dello stesso package e da quelle di altri package se estendono la classe | Se un membro di una classe e definito default (praticamanete non è definito) e' visibile nella classe stessa dalle classi dello stesso package |
HashMap | HashTable |
NON synchronized e NON thread safety | synchronized e thread safety |
i valori vengono ciclati tramite un iterator | i valori vengono ciclati tramite un enumerator |
consente una soloa chiave null ed infiniti null come valori | sia chiavi che valori NON possono essere null |
Abstract Class:
Interface:
Con Collection si intende un framework disegnato per archiviare ogetti, l'interfaccia e le implementazioni sono contenute nel package "java.util"
Collections sono usate per eseguire le seguenti operazioni:
https://www.javatpoint.com/corejava-interview-questions
https://www.edureka.co/blog/interview-questions/java-interview-questions/
https://www.softwaretestinghelp.com/core-java-interview-questions/
http://www.iljavarolo.com/domande-da-colloquio-programmatore-java-j2ee/
https://www.scribd.com/document/204989977/Quesiti-tecnici-per-il-reclutamento-di-sviluppatori
https://www.html.it/guide/guida-programmazione-orientata-agli-oggetti/