- Static variables- cox uzun scope-lari var.Onlar class yuklenende yaradilir ve JVM-de class yuklenene qeder sag salamat qalir.Static deyisenler class ilk yuklenende run olunur.sonra ise initializing blocklar yeni {} en sonra ise constructor run olunur.2ci yuklenmede ise class-in artiq static run olmur digerleri ardicilliqla yuxaridan asagiya dogru run olunur.Eger static block icerisinde her hansi 1 xeta bas vererse EXCEPTIONININITIALIZATIONERROR adlanan error cixacaq.Meselen:
- static int [] a=new int[5];
- Instance variables- diger 1 uzun scope-u olan deyisenlerdir.Onlar yeni class obyekti yaradilanda yaradilir ve bu obyekt silinene qeder yasayirlar.Instance deyisenler member deyisenlerde adlandirilirlar.Bu deyisenler metodun icinde,constructor veya initializer block icinde yaranmirlar.Instance deyisenler ilk yaradilanda default deyerlerine menimsedilir.boolean-in default deyeri false-dur.byte,short,int,long -0,obje ve String -null,char ise -'\u000' -dir.
- Local variables- metodun icinde yaradilan deyisenlerdir.metod stack-de qalana qeder yasayirlar.local deyisenler sag qala bilerler "scope-un xaricinde" ola bilerler.Local deyisenler bezen stack,temporary,automatic veya metod deyisenleri adlandirilirlar.Local deyisenler mutleq deyere menimsedilmelidirler.eger deyere menimsedilmeden istifade olunsalar compile error verecek.Menimsedilme vacib deyil kod olan setirde olsun basqa setirdede ola biler.Java local deyisenlere defaul deyer vermir.Bundan elave olaraq metod icinde teyin olunan deyisenler hec 1 modifier qebul etmir ve static olmur.yalniz final ola biler i fsyo.
- Block variables- code blocklari icra olunan zaman yasayirlar.
int x=10;
public static void main(String [] args ){
x++; // compile olmayacaq.Cunki x instance deyisendir ve objeye aid olur.obje yaradilmadigi ucun istifade oluna bilmez
}
}
void go(){
for(int a=0;a<5;a++){
boolean test=false;
if(a==3){
test=true;
break;
}
}
System.out.print(test); // burada test deyisenini istifade etsek xeta alariq.Cunki test deyiseni scope-un xaricinde yerlesir.Code block tamamlandiqdan sonra block deyisenini istifade elemeye cehd gosterdiyimiz ucun xeta aldiq. cannot find symbol-yeni simvolu tapa bilmir.
void go(){
int y=5;
go2();
y++;
}
void go2(){
y++; // burada y local deyisen oldugu ucun istifade oluna bilmir. hemdeki static olmayan 1 metod basqa yerden cagirila bilmez.
}
}
}
public class Test{
public static void main(String [] args){
Test t;
if(t==null) { // xeta verecek.Cunki t hec 1 seye menimsedilmeden istifade olunur burda.Compiler-a gore null-da 1 deyerdir.null referance uzerinden dot( .) operatoru ile hec 1 sey etmek olmaz.null referance deyere menimsedilmeyen referance ile eyni deyildir.
System.out.print("t is a null");
}
Array-lerde ise local deyisen veya instance deyisen kimi deklare olunmasindan asili olmayaraq default deyerler verilir.Ancaq metodun icinde array-in referansini onun objesine menimsetmesem o zaman xeta verecek.Mutleq referansi ya null yada hansi tipdedise onun obyektine menimsetmek zorundayiq.
Hiç yorum yok:
Yorum Gönder