AndroidLab

Il Laboratorio Italiano Android e Google Chrome

Prosegue su Androidlab la serie di tutorial per familiarizzare con Java, il linguaggio di programmazione utilizzato per sviluppare applicazioni Android. Il nostro obiettivo è quello di preparare chi ha già familiarità con un linguaggio di programmazione, come PHP o C/C++, a sentirsi a proprio agio con il linguaggio di programmazione Java e tuffarsi nello sviluppo di applicazioni Android.
Apprendere-Java-per-programmare-Android
Non abbiamo intenzione di andare nei dettagli del perché si dovrebbe utilizzare un ciclo for rispetto ad un ciclo while, ma vi mostreremo la Sintassi di entrambi i tipi di cicli in Java.

In altre parole, non abbiamo intenzione di insegnare a programmare, ma semplicemente andremo a fornire alcuni esempi dei costrutti e dei principi del linguaggio Java, sottolineando alcuni specifici suggerimenti per programmare Android.

Sia che siate completamente a digiuno di Java, o semplicemente un po’ arrugginiti e volete rispolverarne i dettagli, questo tutorial potrebbe esservi di aiuto.


Cosa occorre per iniziare

Per sviluppare applicazioni Android (o qualsiasi applicazione Java), è necessario un ambiente di sviluppo. Eclipse è un ambiente di sviluppo (IDE) molto popolare tra gli sviluppatori Java ed è l’IDE di riferimento per lo sviluppo in Android. È disponibile gratuitamente per Windows, Mac e sistemi operativi Linux.

Per le istruzioni complete su come installare Eclipse e l’SDK di Android, vedere il sito web degli sviluppatori Android.

Commenti

Come la maggior parte dei linguaggi di programmazione anche Java consente l’utilizzo dei commenti all’interno del codice. È possibile racchiudere un numero qualsiasi di righe di testo  tra i simboli /* per iniziare il commento ed i simboli */ per terminare  il commento  . Per esempio:

1
2
/ * Commento
Multilinea */

È inoltre possibile commentare una singola riga o del testo dopo il codice su una stessa riga utilizzando i simboli  / / .

Per esempio:

1
2
3
4
int x = 7; // si assegna alla variabile x il valore 7
int y = 8; // si assegna alla variabile y il valore 8
int risultato = x + y; // si assegna alla variabile risultato
// il valore risultante dalla somma di x+y

In Java esistono  anche un tipo di commenti chiamati Javadoc che possono essere utilizzati non solo per commentare il codice, ma anche per creare facilmente documentazione del codice.

Questo argomento è piuttosto vasto, ci limitiamo a fornirvi un esempio di come appaiono i commenti Javadoc :

1
2
3
4
5
6
7
8
9
/** Questo metodo fa qualcosa di interessante
 *
 * @param valore elaborato e restituito
 * @param opzione cambia il tipo di elaborazione effettuata su valore
 * @return restituisce il risultato dell'elaborazione di valore
 */
public int metodoEsempio(int valore , boolean opzione) {
    //…
}

Variabili

Una variabile è semplicemente un contenitore di dati, in Java le variabili rientrano generalmente in due categorie:

  • Tipi di dati primitivi, come int, float, double, char, ecc
  • Oggetti Java

Le variabili sono utilizzate per scopi diversi, principalmente vengono utilizzate per memorizzare alcuni valori che possono cambiare o essere modificati durante l’esecuzione del programma, ad esempio, una variabile denominata contatore potrebbe essere incrementata in determinate occasioni. Altre variabili, in particolare le variabili di classe, che rimangono le stesse per tutte le istanze di una data classe, dovrebbero essere definite utilizzando la parola chiave static. Altre variabili potrebbero rappresentare delle costanti, per queste variabili si deve utilizzare la parola chiave final, per specificare che non devono cambiare.

Una variabile è valida solo all’interno del suo territorio o ambito di visibilità. L’ ambito di visibilità di una variabile è spesso controllato dalle parentesi graffe {}, infatti quando una variabile è definita, è valida all’interno di quelle parentesi graffe e se si tenta di accedere a una variabile al di fuori delle parentesi graffa, sarà indefinita.

Le  variabili interne alla classi nel linguaggi object-oriented sono chiamate proprietà, ma possono anche essere chiamate campi o attributi.

Come in altri linguaggi di programmazione l’operatore di assegnazione è il segno uguale = :

1
int i = 5;

Sono presenti gli operatori aritmetici +, -, *, /  e %

Per forzare l’ordine delle operazioni bisogna utilizzare le parentesi, per esempio:

1
int risultato = (a + b) / c;

eseguirà prima la somma di a+b e poi dividerà il risultato per c

Infine, anche Java prevede gli operatori unari, che consentono di modificare una variabile con una semplice dichiarazione:

1
2
i++;  // incrementa di uno; equivalente a i = i + 1;
i--;  // decrementa di uno; equivalente a i = i - 1;

Si noti che gli operatori di incremento (+ +) e decremento (—) possono essere usati sia prefissi (++i) che postfissi (i++), il che significa che l’incremento è eseguito prima o dopo l’uso della variabile. In generale, è preferibile utilizzare operatori postfissi affinché il codice risulti più leggibile.

Tipi di dati primitivi

Diamo un’occhiata agli 8 tipi di dati primitivi disponibili nel linguaggio di programmazione Java:

  • byte
    • Una variabile byte è un intero di 8-bit compreso tra -128 e 127. Spesso utilizzato per gli array.
  • short
    • Una variabile short è un intero di 16-bit compreso tra -32.768 e 32.767. Ancora una volta è spesso utilizzato per gli array.
  • int
    • Una variabile int è un intero di 32-bit compreso tra -2.147,483648 millions e 2.147.483.647. Questo è il tipo più usato per le variabili “numeriche”.
  • long
    • Una variabile long è un intero di 64-bit compreso tra -9.223.372.036.854.775.808 e 9.223.372.036.854.775.807. Utilizzato quando il tipo di dati int non è abbastanza grande.
  • float
    • Una variabile float è un numero reale di 32 bit in virgola mobile a precisione singola. (IEEE 754)
  • double
    • Una variabile double è un numero reale di 64 bit in virgola mobile a precisione doppia. Utilizzare questo tipo di dati per i numeri decimali. (IEEE 754)
  • boolean
    • Una variabile booleana ha solo due possibili valori: vero e falso. Utilizzare questo tipo di dati per le istruzioni condizionali.
  • char
    • Una variabile char può contenere un singolo carattere Unicode a 16 bit.

Le variabili si definiscono specificando il tipo di dati seguito dal nome della variabile, quindi l’ operatore di assegnazione =  ed un valore iniziale.Si ricordi che tutte le dichiarazioni Java terminano con un punto e virgola.

Ad esempio, la seguente istruzione Java definisce una variabile chiamata iVal, con un valore iniziale di 1:

1
int iVal = 1;

Come in molti altri linguaggi, anche in Java si possono definire array in base zero di un tipo di dati specifico.

Ad esempio, la seguente dichiarazione definisce un array di 4 valori interi (le prime quattro potenze di 2):

1
2
3
4
5
6
int[] aiPotenzaDiDue;
aiPotenzaDiDue = new int[4];
aiPotenzaDiDue [0] = 1;    //  2^0=1
aiPotenzaDiDue [1] = 2;    //  2^1=2
aiPotenzaDiDue [2] = 4;    //  2^2=4
aiPotenzaDiDue [3] = 8;    //  2^3=8

Oggetti comunemente utilizzati in Java

Le librerie Java forniscono una serie di oggetti utilizzabili con le comuni strutture di dati, infatti per ogni tipo primitivo esiste una classe equivalente.

Ad esempio, la classe Integer incapsula un valore int e fornisce una serie di metodi utili per la manipolazione degli interi,  nel seguente codice Java si istanzia una variabile intera chiamata iVal, quindi si crea un oggetto Integer utilizzando un costruttore che accetta come argomento un numero intero, e quindi si utilizza un metodo, disponibile nella classe Integer, per convertire il valore intero in valore float.

1
2
3
int iVal = 1;
Integer integ1= new Integer(iVal);
float f = integ1.floatValue();

Tra questi oggetti probabilmente quello che più utilizzerete nelle vostre applicazioni Android sarà String. La classe String è utilizzata per incapsulare stringhe di testo. Esistono altre due classi per la manipolazione delle stringhe StringBuffer e StringBuilder. L’argomento richiede una trattazione più ampia alla quale dedicheremo un intero tutorial più avanti.

1
String strCiao = new String("Hello World!!");

Per un elenco dei più comuni tipi di dati, è possibile consultare la documentazione Android relativa al package java.lang.

È inoltre possibile consultare la documentazione del package java.io relativamente agli oggetti che gestiscono l’ input/output.

Per le classi che gestiscono strutture di  dati complesse come liste, code, stack, date e orari si consulti la documentazione del package java.util.

Infine, le applicazioni Android si affidano ad una serie di utili classi che definiscono i componenti  più comunemente  utilizzati quali Activity, Application, Dialog, Service , queste classi si trovano nel package android.app.

Permessi e livelli di accesso agli elementi delle classi

Come già si è accennato quando abbiamo parlato dell’incapsulamento è possibile controllare la visibilità delle variabili (proprietà) e dei metodi così come delle classi nidificate, specificandone il livello di accesso: public, protected e private.

In generale, se si desidera che un elemento sia accessibile dall’esterno di una classe si userà public, invece se  si desidera che un metodo o una variabile sia accessibile solo dall’interno della  classe stessa si userà private, si utilizzerà protected quando si desidera che un elemento della classe sia visibile dalle classi o sottoclassi dello stesso package.

Per esempio, la seguente classe elaboratore definisce alcune variabili e diversi metodi con differenti livelli di accesso:

  • Una variabile di classe chiamata dati , che è visibile solo all’interno della classe
  • Un costruttore pubblico , i costruttori sono dei metodi particolari in quanto non restituiscono nessun tipo di dato e hanno esattamente lo stesso nome della classe. Ogni volta che creeremo una istanza dell’oggetto della nostra classe utilizzeremo un metodo costruttore. Solitamente il metodo costruttore serve per inizializzare il valore degli attributi al momento della creazione di un nuovo oggetto.
  • Un metodo privato chiamato  elaboraDati(), che può essere chiamato solo dall’interno della classe stessa
  • Un metodo protected verifcaDati(), che può essere chiamato dall’interno della classe stessa, o da una sottoclasse
  • Un metodo pubblico getDati(), che può essere chiamato da qualsiasi luogo, consentendo l’accesso di “sola lettura” alla variabile dati
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class elaboratore {
 
	private int dati;
 
	public elaboratore ()
	{ // costruttore
		dati=0;
	}
 
	private void elaboraDati (int n){
		//esegue n elaborazioni
	}
 
	protected void verificaDati (int n)
	{
		//esegue n verifiche sulle elaborazioni
		elaboraDati(n);
	}
 
	public int getDati()
	{ //restituisce dati
		return dati;
	}
}

Istruzione Condizionale

Java include istruzioni condizionali che possono essere usate per eseguire porzioni di codice, se e solo se vengono soddisfatte determinate condizioni. Tipicamente, una dichiarazione condizionale coinvolge due parti, se le due parti si equivalgono, l’affermazione sarà vera, altrimenti sarà falsa.

Java ha tutti i tipici operatori condizionali, quali:

  • == uguale a, come in (a == b)
  • ! = non uguale/diverso da, come in (x! = y)
  • > maggiore di, come in (z> y)
  • > = maggiore o uguale a, come in (q> = z)
  • < meno, come in (b <a)
  • <= minore o uguale a, come in (a <= z)

Quando è necessario combinare più istruzioni condizionali in un unica grande condizione, è possibile utilizzare gli operatori logici AND (& &) OR (||) :

  • ((A == b) & & (a == c))  / / vera solo se A è uguale a B ed a C
  • ((A == b) | | (a == c))  / / vera solo se A è uguale a B o A è uguale a C

La più semplice istruzione condizionale è if() . Esaminiamo qualche esempio:

1
2
3
4
5
boolean condizione = true;
if(condizione==true)
{
	// Esegue questo codice solo se la variabile condizione è uguale a true
}

se la condizione non è soddisfatta e si desidera eseguire codice alternativo si utilizza la clausola else

1
2
3
4
5
6
7
boolean condizione = true;
if(condizione==true)
{
    / / Esegue questo codice solo se il valore della variabile condizione è true
} else {
    / / Esegue questo codice solo se il valore dela variabile condizione è false
}

Se si desidera gestire più di due casi, si possono utilizzare le istruzioni in cascata in questo modo i if-else-if-else :

1
2
3
4
5
6
7
if(iVar==0) {
    // la variabile è zero
} else if (iVar&gt;0) {
    //  la variabile è un numero positivo
} else {
    // la variabile è un numero negativo
}

Istruzione Switch

Quando una variabile può assumere diversi valori ed a seconda di questi valori è necessario eseguire una determinata porzione di codice si può utilizzare l’ istruzione switch() . Per utilizzare Switch bisogna passargli la variabile da controllare e descrivere le azioni da compiere a seconda dei valori che la variabile può assumere con l’istruzione case, è anche possibile descrivere un operazione predefinita da eseguire qualora non si verifichi nessuno dei casi, utilizzando l’istruzione break si impedisce al codice di verificare i casi successivi.

1
2
3
4
5
6
7
8
9
10
11
12
13
char carattere = 'z';
switch(carattere) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
    // la variabile carattere contiene una vocale si esegue questo codice
    break;
default:
     //la variabile carattere contiene una consonante si esegue questo codice alternativo
     break;
}

I Cicli

Java supporta diversi tipi di cicli.

Per eseguire una porzione di codice finché una condizione è vera si utilizza il ciclo while() :

1
2
3
4
5
6
int num = 3;
while(num&gt;0)
{
    // esegue il codice fino a quando la variabile num è positiva
    num--;  // decrementa la variabile nume di 1
}

Se si vuole valutare la condizione dopo avere eseguito il codice al meno una volta si può utilizzare un ciclo do-while

1
2
3
4
5
6
7
int num = -1;
do
{
// esegue il codice fino a quando la variabile nume è positiva
num++;  // decrementa la variabile nume di 1
}
while(num&gt;0); // verifica se num è maggiore di 0

Per eseguire un ciclo per un specifico numero di volte si utilizza un ciclo for(). L’istruzione for() richiede tre parametri : il valore iniziale, il valore finale, ed il valore di incremento, se volessimo eseguire un ciclo 100 volte utilizzeremo il seguente codice:

1
2
3
4
for(int i=1; i&lt; =100; i++)
{
     // esegui codice
}

Si noti che l’istruzione break può anche essere utilizzata per uscire da un ciclo. L’istruzione continue in un ciclo salta tutte le istruzioni che lo seguono e va a valutare direttamente la condizione.

Le istruzioni super e this

L’istruzione super consente di fare riferimento a variabili e metodi della classe superiore (superclass).
Supponiamo di aver sovrascritto un metodo di una classe in una sua sottoclasse (override). Quando si istanzia la sottoclasse e si chiama il metodo, sarà invocato il nuovo metodo che ha sovrascritto quello dichiarato nella classe superiore. Per invocare il vecchio metodo sovrascritto dichiarato nella classe superiore, nella sottoclasse si può usare l’istruzione super. Se il metodo si chiama ad esempio calcola( ), allora con la scrittura super.calcola( ) si potrà invocare il metodo originale della superclasse.
L’istruzione super può essere utilizzata in una sottoclasse per chiamare un costruttore della classe superiore.
L’istruzione this, al contrario di super, rappresenta l’oggetto corrente. In pratica, this permette ad un oggetto qualsiasi di fare riferimento a sé stesso.
Questo si rende  necessario, per esempio, quando un oggetto deve passare sé stesso come argomento in un metodo di un’altra classe oppure ogni volta che un metodo fa riferimento alle proprie variabile e metodi. Ad esempio:

1
2
3
4
5
6
7
8
9
10
public class Classe {
    public int x = 0;
    public int y = 0;
 
    //costruttore
    public Classe (int x, int y) {
	this.x = x;
	this.y = y;
    }
}

Conclusioni

Sebbene arrivati a questo punto non siamo ancora in grado di scrivere autonomamente la nostra prima applicazione Android, dovremmo essere in grado di leggere e comprendere molti degli esempi di applicazioni Java ed Android , per lo meno a livello di sintassi, che si possono trovare in rete. La prima classe che noteremo vedendo il codice di un applicazione Android è la classe Activity. Nei prossimi tutorial entreremo maggiormente nel dettaglio della programmazione Java per poi dedicarci all’SDK di Android.

Indice

  1. Introduzione a Java
  2. La Sintassi di Java
  3. instance of – Verificare il tipo di un oggetto
  4. Gli Array

Michele Dipace

Admin di Androidlab e "Computer Addicted", ha cominciato la sua"carriera" nella metà degli anni 80 sui computer 8 bit Commodore e Sinclair passando poi al 16 bit Amiga, diventandone grande appassionato. Oggi Linux user, crede che Android sia il sistema operativo destinato ad emergere nel mercato della telefonia mobile.

More Posts - Website

Follow Me:
TwitterFacebookLinkedInPinterestGoogle PlusYouTube

  • Pingback: Tweets that mention Apprendere Java per programmare Android: La Sintassi di Java | AndroidLab -- Topsy.com()

  • Premetto che non ho ancora letto tutto l'articolo ma solo una rapida occhiata, volevo segnalare agli aspiranti programmatori java la java code convention http://www.oracle.com/technetwork/java/codeconv-1… le metodologie di scrittura del codice sono importati sia per rendere chiaro il codice che per renderlo più agevole a modifiche anche di altri

    poi per quanto riguarda Oggetto comunemente utilizzati in java, ho guardato l'esempio e direi che non è errato ma non è il massimo 😛
    solitamente si utilizza il casting per quel genere di cose, che per alcuni tipi primitivi può essere implicito.
    quindi nel caso del casting da int a real (float o double) io userei float f = iVal; o float f = (float) iVal;
    mentre ad esempio se dovessimo fare il casting di una stringa in un intero possiamo utilizzare Integer.parseInt(str); senza la necessità di creare un' istanza della classe Integer.

    Se non in questo almeno nel prossimo io spiegherei l'utilizzo di this.

Forum Android
Diventa un blogger, scrivi un articolo