Variabili di istanza, variabili locali.


Java Sun

Earthweb
(ex Gamelan)

Jars

Java Boutique

Java Center

PIP






 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.





 next		content		previous