Colloquio in JAVA

Cos'è Java?

Java è un linguaggio di programmazione ad alto livello con una piattaforma indipendente dall'architettura fisica e dai sistemi operativi.

Quali sono le caratteristiche di Java?

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):

  • Object-oriented
  • Inheritance
  • Encapsulation
  • Polymorphism
  • Abstraction

Cosa si intende con "costruttore"?

i seguneti concetti sono correlato con il significato di "costruttore":

  • Quando un oggetto viene istanziato (new) il costruttore della relativa classe viene invocato.
    • Il costruttore e' un metodo con lo stesso nome della classe.
  • Se il contruttore non viene creato esplicitamente vine definito quello di default.
  • Il costruttore puo' essere sovrascritto (overloaded)
  • Se un contruttore viene definito con un parametro, va esplicitamente definito quello di default senza parametri.

Cosa si intende con "varaibile locale" e "variabile di istanza"?

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.

Cosa e' una classe (class)?

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).

Cosa e' un oggetto (Object)?

L'instanza ,new, di una classe è chiamato oggetto, un oggetto ha uno stao e dei comportamenti (behavior).

Cosa e' l'ereditarieta' (Inheritance)?

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.

Cosa e' l'incapsulamento (Encapsulation)?

Lo scopo dell'Encapsulation:

  • proteggere il codice
  • migliorare la mantenibilita'
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
                .........
                }
        }
}

Cosa e' il poliformismo (Polymorphism)?

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"

Cosa si intende con "Method Overriding"?

L'overriding di un metodo viene fatto da una sub class sul metodo del super classe e rispetta le seguenti regole:

  • il metodo ha lo stesso nome
  • gli argomenti sono gli stessi
  • il ritorno e' lo stesso

Cosa si intende con "Overloading"?

L'overloading di un metodo della stessa classe o di una super classe ha le seguenti regole:

  • Il metodo ha lo stesso nome
  • Il metodo ha argomenti diversi
  • Il metodo puo' ritornare o meno lo stesso risultato

    Nota: il poliformismo non e' applicabile all'overloading.

Cosa e' una interfaccia "Interface"?

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();
}
  • tutti i metodi sono definiti "Public abstract"
  • tutte le variabili sono "public static final", cioè delle costanti
  • una classe implementa una interfaccia (non estende)
  • la classe che implementa una interfaccia deve relizzare tutti i metodi dell stessa

Cosa si intende con classe astratta "Abstract class"?

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.

Quali sono le differenze tra Array e Array List?

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

Quali sono le differenze tra String , String Buffer e String Builder?

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

Quali sono le differenze tra i modificatori di accesso Public , Private , Protected e Default?

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

Quali sono le differenze tra HashMap e HashTable?

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

Quali sono le differenze tra Abstract class e Interface?

Abstract Class:

  • Abstract classes ha un constructor di default
  • Contiene metodi astratti e non astratti
  • La classe che estende una classe astratta deve implementare solo i metodi astratti
  • Le classi astratte contengono variabili di instanza

Interface:

  • Non hanno un costruttore e non possono essere instanziate
  • Possono dichiarati solo metodi astratti
  • Le classi che implementano una interfaccia devoni implementare tutti i metodi
  • le interfaccie contengono solo costanti

Cosa si intende con Collections in Java?

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:

  • Searching
  • Sorting
  • Manipulation
  • Insertion
  • Deletion