19 Nisan 2012 Perşembe

JAVADA ARRAY DECLARATION,CONSTRUCTION AND INITIALIZATION

Javada Array-ler eyni tipin coxlu deyisenlerini saxlayan obyektler-dir.Array-ler primitive veya obyekt referanslarinin her 1ini tuta biler,ancaq array-in ozu hemise heap hissede obyekt olacaq,hetta eger array primitive elementleri tutursa bele.Yeni primitive tiplerin arraylerin yarada bilerik.Burada 3 seyi bilmeliyik:

  • Array reference deyiseni nece duzelir ( declare )
  • Array obyekti nece duzedilir ( construct )
  • Array -e elementlerin yerlesdirilmesi ( initialize )
Declare:
int [] key;     // bu tovsiye olunur
int key [];     // legal amma az oxunan
Yuxarida Array primitive kimi deklare olunub.Biz hemcinin multidimensional arrayleride deklare ede bilerik,hansiki array-in arrayidir.
String [] [] [] name;            // tovsiye olunur
String [] name [] ;               // legaldir bele yazilis.
Legal olmasi dogru olmasi menasina gelmir.Declarationda array-in olcusunu daxil etmek legal deyil.
int [5] scores;            // compile olmayacaq.

Constructing:
Yeni arrayin heap-de objesini yaratmaqdir.(hansiki butun obyektler orada yasayir) new ile yaradilir array tipin uzerinde.Objeni yaradanda Java bilmelidir heap-de ne qeder bos sahe bolusdurulmelidir.Ona gorede creation time zamaninda array-in size-ni mueyyen etmek lazimdir.Arraylarin size-i arraylerin tutacaqlari elementlerin sayidir.

int [] test=new int[4];
Burada array obyekti 4 element tutur-default deyeri 0 olan int tipinde elementleri saxlayir.
Thread [] a=new Thread[5];
Burada biz Thread obyektini yaratmiriq,Yegane yaratdigimiz obyekt 5 Thread referance deyiseni tutur.Ancaq Thread obyektleri yaradilmir veya bu referanslara menimsedilmir.
a[0]="   "; bu kimi hec 1 obyekte menimsedilmir.eger 1 referance obyekte menimsedilmirse demeli null olur.
int [] a=new int [] ; // compile olmayacaq,cunki size verilmeyib.

int [] [] myArray=new int [3] [ ];
Bu int tipinin multidimensional array-i int [] array-nin obyektidir.Burada diqqet yetirmek lazimdirki 1ci [] -na size verilir.Cunki JVM obyektin olcusunu bilmelidir onu a deyisenine menimsetmek ucun.

Bu misalda myArray referansi heap-de 3 yere bolunur yeni 3 yer tutur. 0,1,2.
Bu bolunmus 3 hisseden 1ciye [] -dan 2 element uygun gelir,2ciye 3 element uygun gelir,3cu ise null qalir.


int[ ][ ] myArray = new int[3][ ];
myArray[0] = new int[2];
myArray[0][0] = 6;
myArray[0][1] = 7;
myArray[1] = new int[3];
myArray[1][0] = 9;
myArray[1][1] = 8;
myArray[1][2] = 5;

int a[]=new int[5];
burada a[5] yazsaq exception verecek.Cunki index 0-dan baslayir.


 int[] a = new int[3];
 int b = -7;
a[b] = 4;
System.out.println(a[b]);   //  buradada exception verecek.


Arraylerde length Stringlerdekinden ferqlenir.Stringlerde length() bele,Arraylerde ise length olur.() olmur.
length deyirki array ne qeder element tutur.ancaq bize demir bu elementler neye menimsedilib.

int [] a=new int [] {2,4,6};
Bu anonyms array-dir.Bele array-lerde size-i mueyyen etmirik.Cunki burada size 2,4,6 ile mueyyen olunurki 3 dur.

int [] a=new [] int{2,4,6}; yazmaq duzgun olmaz.

Eger
int [] a=new int[3]{7,8,9};   yazsam xeta verecek.cunki yuxarida dedikki { } arasinda , ile ayrilan reqemler size-i gosterir.size-i 3 yazmaq veya bu formada yazmaq eyni seydir.

Meselen int tipinde olan 1 array 32 bit deyerinde ozune uygun olan deyeri tuta biler.Meselen:
int a [] new int[4] ;
byte b=4;
char c=' d ';
short s=7;
a[0]=b;
a[1]=c;
a[2]=s;
Cunki byte,char,short int-den balacadirlar.

class Car{ }
class Subaru extends Car{ }

Car [] c={new Subaru(),new Car()};
Burada Car super class oldugu ucun Subaru ve Car obyektlerini Car tipinde array-icinde qoya bilerik her 2sinde.Eger interface implements edirse o zaman oda bu kimi olur.

interface Sporty { }
class Ferrari implements Sporty extends Car{ }
Sporty [] s=new Sporty[3];
s[0]=new Ferrari();
s[1]=new Car();   yazsam xeta verecek.Cunki Car Sporty interface-ni implement etmir.Yeni burada IS-A elaqesi odenmir.



  public static void main(String[] args) {
        int b[];
        int a[] = new int[4];
        b=a;
        char [] c=new char[2];
        b=c;   burada xeta verecek.Cunki array-lerde casting sohbeti yoxdur.char-->int cevrilmesi movcur deyil.
    }


Eger 1 class digerini extends edirse o zaman hemin super class-in referansi sub class tipinde olan arrayin referancina menimsedile biler.Eger extends etmeden menimsedilirse o zaman xeta verecek.Cunki IS-A elaqesi pozulacaq.IS-A elaqesi instanceof operatoru vasitesile mueyyen edilir.Bu qayda (menimsetme) interface-in implement etdiyi classlardada ozunu dogruldur.

1olculu array 2 olculu array-e menimsedile bilmez.

int a[] [] =new int[3][];
int [] b=new int[2];
int c=7;
a[0]=c;        // bu dogru deyil.cunki burada int array teleb edir int deyil.
a[0]=b;        // bu ise dogrudur.yeni 3 hisseye bolunmus array-in 1ci deyeri 2 reqem tutur.

Hiç yorum yok:

Yorum Gönder