Introduzione a Java

Da Bioingegneria Elettronica e Informatica.

Vitoantonio Bevilacqua vitoantonio.bevilacqua@poliba.it

Antonio Brunetti antonio.brunetti@poliba.it

Gianpaolo Francesco Trotta gianpaolofrancesco.trotta@poliba.it

Pagina in lavorazione

Introduzione

Con questa lezione iniziamo il corso di Algoritmi e Strutture Dati in Java da 6 CFU. Questa dispensa costituisce quindi il primo esempio di materiale didattico che si intende mettere a disposizione degli studenti, seguendo l’ordine e le modalità con cui gli argomenti verranno presentati a lezione. Obiettivo dell’intero corso è mettere in condizione lo studente frequentante, destinatario elettivo di queste dispense, ma anche lo studente non frequentante, di comprendere velocemente i presupposti teorici che sottendono a una buona, immediata e continua pratica alla programmazione in Java. Le dispense, quindi, non intendono sostituirsi completamente ai libri di testo consigliati nel programma dell'insegnamento, ma rappresentano sicuramente un valido strumento per tenersi al passo con gli argomenti trattati a lezione e un ottimo riferimento per un rapido test del livello di apprendimento durante la frequenza o in vista della prova scritta di esame.

I tipi primitivi, le variabili e gli array

Java mette a disposizione 8 tipi di dati primitivi: [1] [2]

  1. byte occupazione di memoria pari a 1 byte;
  2. short occupazione di memoria pari a 2 byte;
  3. int occupazione di memoria pari a 4 byte;
  4. long occupazione di memoria pari a 8 byte;
  5. float occupazione di memoria pari a 4 byte;
  6. double occupazione di memoria pari a 8 byte;
  7. booolean occupazione di memoria pari a 1 byte;
  8. char occupazione di memoria pari a 2 byte.

Per esempio, una riga di codice di questo tipo è una dichiarazione int Z ; ovvero associa al nome simbolico Z un indirizzo di memoria. Da quel momento in poi Z è una istanza del tipo int il cui valore variabile sarà codificato in 4 byte adiacenti in memoria. Il compilatore Java associa a questo nome simbolico Z un indirizzo nella memoria fisica, laddove per indirizzo di memoria si intende una numerazione progressiva dei singoli byte in memoria.

Per esempio: se supponiamo che la seguente tabella sia un'immagine dello stato della memoria, laddove ogni cella è un byte e ogni riga una sequenza di 4 byte dedicata a contenere il valore di una variabile intera e se supponiamo di iniziare a numerare (indirizzare) la memoria dal byte in alto a destra, diremo che questo byte (il cui contenuto corrisponde a 8 bit posti tutti a 0 ed evidenziati in rosso) ha indirizzo di memoria 0, quello immediatamente a sinistra (il cui contenuto corrisponde a 8 bit posti tutti a 0 e evidenziati in verde) indirizzo di memoria 1, (quello il cui contenuto corrisponde a 8 bit posti a valore 00000001 e evidenziati in giallo) ha indirizzo 4 ecc. ecc, proseguendo la numerazione da destra verso sinistra e dall'alto verso il basso.

tabella

N.B. L'indirizzo della variabile intera Z è 0, della variabile intera P è 4, della variabile intera N è 8, della variabile intera S è 12.

In pratica lo stato della memoria evidenziato nella tabella precedente potrebbe corrispondere in sequenza alle seguenti azioni:

   int Z;  // la variabile intera Z è memorizzata a partire dal byte il cui indirizzo di memoria è 0, nei 4 byte aventi indirizzo di memoria 0,1,2 e 3.
   int P; // la variabile intera P è memorizzata a partire dal byte il cui indirizzo di memoria è 4, nei 4 byte aventi indirizzo di memoria 4,5,6 e 7.
   int N; // la variabile intera N è memorizzata a partire dal byte il cui indirizzo di memoria è 8, nei 4 byte aventi indirizzo di memoria 8,9,11 e 11.
   int S; // la variabile intera S è memorizzata a partire dal byte il cui indirizzo di memoria è 12, nei 4 byte aventi indirizzo di memoria 12,13,14 e 15.
   Z=0; // la variabile Z è inizializzata al valore nullo ovvero a una sequenza di 32 bit a valore 0 (in complemento a 2);
   P = Z+1; // alla variabile P viene assegnato il valore della variabile Z incrementato di 1, ovvero +1 (in complemento a 2);
   N= -1*P; // alla variabile N viene assegnato il valore opposto di P ovvero -1 (in complemento a 2);
   S = P + N; // alla variabile S viene assegnato il valore nullo (in complemento a 2).