Multe erori de compilare sunt generate de programatori deoarece nu au o imagine clara cu privire la domeniul de vizibilitate al variabilelor, cat sunt disponibile si când pot fi accesate. Conceptul de domeniu de vizibilitate descrie viata unei variabile, sau zona de disponibilitate, dupa ce aceasta a fost definita.
Alte subiecte care fac parte din acest tutorial Java sunt accesibile prin intermediul Java Tutorial 6 – Cuprins.
Pentru a intelege acest subiect, vom porni de la exemplul urmator:
class Student{
public static int noStudents = 0; //variabila statica
public int age; //variabila de instanta - atribut
public int[] marks; //variabila de instanta - atribut
public Student()
{
noStudents++; //acces variabila statica
this.age = 0;
marks = new int[10];
}
public float getAverage()
{
float sum = 0; //variabila locala
for(int i = 0;i < marks.length;)
{ //i este o variabila locala in blocul for
sum+=marks[i];
i++;
}
return sum/marks.length;
}
}
public class Main{
public static void main(String[] args)
{
Student s1 = new Student();
Student s2 = new Student();
//acces variabila statica
System.out.println("Exista ";+Student.noStudents+" studenti");
}
}
Fiecare tip de variabila are domeniului sau de vizibilitate:
variabile de Instanta (atribute) - aceste variabile definesc valorile unui obiect, deci, ele sunt create atunci când obiectul este creat; ele exista de când obiectul este creat si pana cand acesta este distrus; doar obiectul si metodele sale au acces la variabilele de instanta;
variabilele statice - aceste variabile sunt parte dintr-o clasa; sunt create atunci când clasa este incarcata de JVM;
variabile locale ale unor metode - aceste variabile sunt definite pe stiva metodei si ele exista atâta timp cât metoda este executata (exista in stiva de apeluri); variabilele locale nu pot fi accesate si din interiorul unor metode imbricate chiar daca ele exista cand metoda imbricata este executata ( Java Tutorial - # 8 Stiva metodelor si memoria Heap );
variabile locale unui bloc de cod - aceste variabile sunt definite in interiorul blocurilor de cod (intre { si }) si poate fi utilizate in timp ce blocul este executat; blocuri de cod sunt tipice pentru, for, while si blocuri de initializare.
Care sunt erorile comune in ceea ce priveste domeniul de vizibilitate a variabilelor - Cannot find symbol error
Eroarea de compilare Cannot find symbol este generata atunci când incercati sa utilizati o variabila, locala unui bloc, in afara blocului:
public float getAverage()
{
float sum = 0; //variabila locala
for(int i = 0;i < marks.length;)
{ //i este o variabila locala in blocul for
sum+=marks[i];
i++;
}
//eroare de compilare - Cannot find symbol
i = 0; //COMPILER ERROR
return sum/marks.length;
}
Un alt caz in care veti obtine aceeasi eroare de compilare este atunci când incercati sa accesati o variabila locala a unei metode dintr-o metoda imbricata:
public static void DoSomething()
{
int variable = 0; //variabila locala
DoSomethingElse(); //metoda imbricata
}
public static void DoSomethingElse()
{
//eroare de compilare - Cannot find symbol
variable++; //COMPILER ERROR
}
Veti obtine aceeasi eroare atunci când incercati sa accesati atributele sau metodele unui obiect dintr-un context static, fara a folosi o instanta, cum ar fi in main.
public static void main(String[] args)
{
Student s1 = new Student();
Student s2 = new Student();
//acces variabila statica
System.out.println("Exista "+Student.noStudents+" studenti");
//eroare de compilare - Cannot find symbol
age = 23; //COMPILER ERROR
getAverage(); //COMPILER ERROR
}
Alte subiecte care fac parte din acest tutorial Java sunt accesibile prin intermediul Java Tutorial 6 - Cuprins.