S’entén per abast, àmbit o scope d’una variable, la part de el programa on la variable és accessible. Veurem els tipus que existeixen.
A l’igual que C / C ++, en Java, tots els identificadors tenen un àmbit lèxic (o estàtic). Els programes de Java estan organitzats en forma de classes. Cada classe és part d’un paquet. Les regles d’àmbit de Java es poden cobrir en les següents categories.
Table de contingut
1. Variables membre ( àmbit a nivell de classe)
Aquestes variables s’han de declarar dins de la classe (fora de qualsevol mètode). Es pot accedir directament a elles en qualsevol part de la classe. Fem una ullada a un exemple:
public class Test{ //Todas las variables definidas directamente dentro de una clase //son variables miembro int a; private String b; void method1() {....} int method2() {....} char c;}
- Podem declarar variables de classe en qualsevol lloc de la classe, però fora dels mètodes.
- l’accés especificat de les variables membre no afecta l’abast d’elles dins d’una classe.
- Es pot accedir a les variables membre fora d’una classe amb les següents regles
Modificador | Paquet | Subclasse |
---|---|---|
public | si | si |
protected | si | si |
default (sense modificador) | si | no |
private | no | no |
2. variables locals (Àmbit a nivell de mètode)
Les variables declarades d entro d’un mètode tenen abast a nivell de mètode i no es pot accedir fora de l’mètode.
public class Test{ void method1() { // Variable local (ámbito a nivel de método) int x; }}
hi ha un altre exemple de l’abast de mètode, excepte que aquesta vegada la variable es passa com a paràmetre per al mètode:
class Test{ private int x; public void setX(int x) { this.x = x; }}
El codi anterior fa servir la paraula clau per diferenciar entre les variables locals i les variables de classe.
Com a exercici, predigui el resultat de el següent programa Java.
public class Test{ static int x = 11; private int y = 33; public void method1(int x) { Test t = new Test(); this.x = 22; y = 44; System.out.println("Test.x: " + Test.x); System.out.println("t.x: " + t.x); System.out.println("t.y: " + t.y); System.out.println("y: " + y); } public static void main(String args) { Test t = new Test(); t.method1(5); }}
Sortida:
Test.x: 22t.x: 22t.y: 33y: 44
3. Variables de bucle (Àmbit de bloc)
Una variable declarada aquí a un parell de claudàtors “{” i “}” en un mètode té abast només dins dels claudàtors.
public class Test{ public static void main(String args) { { // La variable x tiene alcance dentro // los corchetes int x = 10; System.out.println(x); } // La línea de código comentada debajo produciría // error ya que la variable x está fuera del alcance. // System.out.println(x); }}
Sortida:
10
Com un altre exemple, consideri córrer el programa amb un cicle for.
class Test{ public static void main(String args) { for (int x = 0; x < 4; x++) { System.out.println(x); } // Producirá un error System.out.println(x); }}
Sortida:
11: error: cannot find symbol System.out.println(x);
La forma correcta de fer l’anterior és:
// El programa después de corregir el errorclass Test{ public static void main(String args) { int x; for (x = 0; x < 4; x++) { System.out.println(x); } System.out.println(x); }}
Sortida:
01234
Com a exercici, predigui el resultat de el següent programa Java.
class Test{ public static void main(String args) { { int x = 5; { int x = 10; System.out.println(x); } } }}
Alguns punts importants sobre l’àmbit de les variables en Java:
- En general, un conjunt de claus {} defineix un abast.
- En Java, generalment podem accedir a una variable sempre que s’hagi definit dins de el mateix conjunt de claudàtors que el codi que estem escrivint o dins de qualsevol parèntesi dins dels claudàtors on es va definir la variable.
- qualsevol variable definida en una classe fora de qualsevol mètode pot ser utilitzada per tots els mètodes membres.
- Quan un mètode té la mateixa variable local que un membre, la paraula clau “this” es po d’usar per fer referència a la variable de classe actual.
- Perquè una variable es llegeixi després de l’acabament d’un cicle, ha de declarar-abans de el cos de l’cicle.