JSem: 1.5
|
In Java ogni blocco di programma viene delimitato da parentesi graffe
{ }. Per esempio il blocco principale di un'applet:
import java.applet.*;
import java.awt.*;
public class Var extends Applet{ //inizio blocco principale dell'applet
...............
...............
} //fine dell'applet
Nelle prime righe si definiscono le variabili che saranno visibili in tutta l'applet; queste
variabili possono essere inizializzate subito o nel blocco
init().
import java.applet.*;
import java.awt.*;
public class Var extends Applet{
int x;
public void init(){
x = 10;
}//fine della subroutine (metodo init())
Adesso inseriamo un metodo (subroutine) paint:
public void paint(Graphics g){
int y = 20; //y è visibile solo nel blocco paint
//x è visibile qui
g.drawString("Questo è y: " + y + ", questo è x: " + x , 10, 25);
if(x == 10){
int z = 30; //z visibile solo in questo blocco if
y += z; //si aggiunge z a y, adesso y vale 50
//x è visibile nel blocco if
g.drawString("Adesso y = " + y +", e x = " + x, 10, 50);
} //fine del blocco if
g.drawString("Ancora: y = " + y + ", e x = " + x, 10, 75);
//g.drawString("Questo è z: " + z, 10, 100);
//ERRORE! z non è definito qui.
} //fine blocco paint
} //fine dell'applet
Provate a compilare ed eseguire questo codice, dopo riprovate togliendo le sbarre di
commento alla riga:
//g.drawString("Questo è z: " + z,10,100);
in fase di compilazione, riceverete un messaggio di errore: "Undefined variable: z"
Questo esempio illustra la differenza tra una variabile "globale" o di istanza (qui x),
e una
variabile "locale" (qui y e z): le variabili locali sono visibili solo all'interno del
blocco nel quale sono state definite.
Attenzione! Non è possibile dichiarare la stessa variabile in due blocchi
diversi:
import java.applet.*;
import java.awt.*;
public class VarEs2 extends Applet{
int x = 10;
public void paint(Graphics g){
//int x = 30; ERRORE! "Variable x is already defined"
x = 30; //questo va bene, si assegna un altro valore alla variabile x
g.drawString("Questo è x: " + x, 10, 25);
}
}
Le variabili "globali", cioè quelle definite all'inizio di un
blocco class, vengono dette variabili di istanza,
questo perchè ogni oggetto (cioè ogni istanza della classe)
contiene una propria copia di tali variabili.
|
|