30 Mart 2012 Cuma

Javada Massivler (Arrays)


Javada massivler obyekt oldugu ucun massiv yaratmaq ucun istifade olunan usul eyni obyektlerin yaradilmasi kimidir. new acar sozunu istifade ederek massiv yarada bilerik. Tek ferq, sadece kompilyatora bir massiv yaratdigimizi bildirdiyimiz ‘ [ ] ‘ (massiv operatoru) operatoru deyisen tesvirinde gosterilir.
Javada massivler haqqinda bilinmesi lazim olan en vacib noqtelerden biri Javada massiv elementleri ’0’-dan baslayaraq nomrelenir. Yeni 10 elementden ibaret bir massiv yaratdigimiz zaman massivin ilk elementinin indeksi 0,son elementinin indeksi 9 olar.

Massivleri Yaratmaq

int[] massiv;
int basqaMassiv[];
Yuxarıdaki kodda, int tipinde 2 ferqlı birolculu massiv referansı yaratdiq.Massiv yaradilmasinda istifade olunan ‘[ ]‘ operatoru ya massivin tipinden sonar,ya da yaratdigimiz massivin adindan sonar yazila biler.operatörü tip belirtecinden sonra ya da değişken tanımlamasından sonra kullanılabilir.
Massiv referanslarına qiymet verme,massiv ucun bir obyekt yaradilaraq kod icinde herhansi bir yerde edile biler.
int[] massiv = new int[10]; // 10 elementlik bir int massivi
int basqaMassiv[];
basqaMassiv = new int[5]; // 5 elementlik basqa bir massiv
int tipinde olduğu kimi Javada primitive tiplerden obyekt tiplerine qeder her tipden massiv yarada bilerik.
int[] intMassivi;
byte[] byteMassivi;
String[] stringMassivi;
Object[] objectMassivi;

Massivlere Qiymet Vermek

Javada massivlere 2 cur iymet vere bilirik.dizilere Birinci qayda massiv referansı yaratdigimiz setirde massiv elementlerine aciqca qiymet vere bilirik.Bu qaydada diqqet edilmesi lazim olan noqte obyekt referansı yaratdigimiz setirde bu qiymetlendirmeni etmeyimiz sertdir.Obyekt referansı yaratdiqdan sonar bu qiymetlendirmeni kodun basa yerinde etmek kompilyasiya xetasina sebeb olar...
String[] stringMassivi = {"Java", "C++", "Python", "Haskell"}; // duzgun
String[] basqaMassiv;
basqaMassiv = {"Php", "Perl", "Ruby"}; // Error : kompilyasiya xetasi
Massivlere qiymet vermede istifade olunan basqa bir usul massiv referansina bir massiv obyekti yaradib qiymetlendirme etmekdir.Massivin olcusunu teyin etdikden sonar massiv elementlerini kodun herhansi bir yerinde vere bilerik.
int[] intMassivi;
intMassivi = new int[10] // 10 luq bir int massivi yarat
intMassivi[0] = 1;
intMassivi[1] = 2;
//..
intMassivi[9] = 10; //massivin son elementi
Massiv elementlerine massiv operatoru olan ‘[ ]‘ operatoru ile muraciet ede bilirik.Yuxaridaki kodda görüldüyü kimi 10 luq bir massivi yaratdiq ve massiv elementlerine ‘[ ]‘ operatorunu istifade ederek raatcamuraciet ede bilir,sanki normal bir deyisen kimi qiymet vere bilirik. Xatırlayın, Javada massiv elementleri 0 dan başlayir.Ona gore de ilk elemente intMassiv[0],son elemente ise intMassiv[9] seklinde qiymet veririk.

Massiv Uzunluğu

Javada massivler bir obyekt oldugu ucun siniflerin malik oldugu butun ozellikleri massivler ile de istifade ede bilirik.Biz massivin uzunlugunu alamaq ucun length adinda bir ozellikden istifade ede bilerik. massiv.length şeklinde massiv adındaki massivin uzunlugunu tapa bilerik.
Indi yaratdigimiz 10 elementlik bir int massivine 30-dan boyuk 10 dene say verek.
int[] massiv;
massiv = new int[10];
int asagiserhed = 30;

for(int i = 0; i < massiv.length; asagiserhed++)
{
    if(asagiserhed % 2 == 0)
    {
        massiv[i] = asagiserhed;
        i++;
    }
}
// massivin qiyetlerini ekrana verek
for(int i=0;i<massiv.length;i++)
{
    System.out.printf("%d ", massiv[i]);
}
// netice
30 32 34 36 38 40 42 44 46 48

Javada Cox Olculu Massivler

Javada massivler istenilen olcude teyin edile biler.İki, Üç olculu ( Two Dimensional, Three Dimensional Arrays) ve daha cox olcude teyin etmek tamam proqramilara buraxilmisdir. Çox olculu massivler rahatca massivlerin massivi (arrays of arrays)  kimi dusune bilerik. Ancaq,kodun oxunaqli olmasi ucun massivleri iki olculu olmasi daha meqsede uygundur. Burada ilk massiv setir sayini,diger massiv ise sutun sayini temsil edir.
String[][] massiv = {
    {"Eli", "Ayşe"},
    {"Bey", "Xanım"}
    };
    System.out.println(massiv[0][0] + " " + dizimassiv[1][0]);
    System.out.println(massiv[0][1] + " " + massiv[1][1]);
// netice
Eli Bey
Ayşe Xanım
Üstdeki numunede iki olculu bir String massiv yaratdiq.Çox olculu massiv yaradarken edilmesi lazim olanlardan biri yaradacagimiz massiv olcusu qeder massiv operatorunu tipin qabagina elave etmekdir.Numunede biz 2 olculu bir massiv yaratdigimiz ucun bu teyin etmeni String[][] massiv şeklinde ifade etdik.
Çox olculu massivler bezen bas qarisdirici olsa da mentiqi cox rahatdir. Bir massiv yaradilir,o massivin elementleri de basqa bir massivdir.Bu şekilde, istenildiyi qeder derinlikde massiv yarada bilerik.

Cox Olculu Massiv Uzunluqlari

Daha evvel behs etdiyimiz kimi,Java massivleri length adinda bir ozellik sayesinde uzunlugunu rahat sekilde mueyyen olunurdu.Çox olculu massivlerin de bu qaydada uzunlugunu tapa bilerik. Numunedeki massiv adindaki massivin uzunlugunu asagidaki kimi tapa bilerik.
System.out.println(massiv.length);
//netice
2
massiv adındaki massivin elementleri de bir massiv oldugu ucun massiv[0] seklinde bir ifade massiv icerisindeki ilk massivi verecek.Yene eyni qaydada bu massivlerin uzunluqlarini da asagidaki kimi tapa bilerik.
massiv[0].length
massiv[1].length
Numunenin C dilinde 2 olculu bir massiv yaratmaq ucun array[10][5] şeklinde yazariq.Bu ifade ile array adindaki massivin 10 elementi de massiv olan bir massiv teyin ederik.Massiv elementlerinin her biri sabit olaraq 5 uzunlugunda basa bir massivdir. Biz bu 10 dene 5 elemelementlik massivin olculerini ferqli olculerde teyin ede bilerik.Anca Java buna icaze verir.
// Elementleri massiv  olan bir massiv referansı yarat
// Yeni cox olculu massiv
String[][] massiv;
//bu massivin elementleri massiv olan 2 elementi olsun
massiv = new String[2][];
//massivin ilk elementi 2 elementli bir massiv olsun
massiv[0] = new String[2];
//ilk element olan massivin ilk elementi "Bir" olsun
massiv[0][0] = "Bir";
//diger elementi de "İki" olsun
massiv[0][1] = "İki";
//massiv adindaki massivin ikinci elemelementi uzunluğu 3 olan bir massiv olaraq teyin et
massiv[1] = new String[3];
//ikinci elementinin ilk elementi "Üç" olsun
massiv[1][0] = "Üç";
massiv[1][1] = "Dörd";
massiv[1][2] = "Beş";

System.out.println(massiv[1][2]);
System.out.println(massiv [0][1]);
//Netice
Beş
İki
Çox olculu massivlerdeki bu ozellik Javanin mensub oldugu ozellikdir.

24 Mart 2012 Cumartesi

Static


Sinif ve Obyekt Deyişenleri
Statik acar sozunu islederek yaradilan deyisenler obyekt deyiseni deyil “sinif deyiseni” olaraq adlandirilirlar.Bu deyisenler obyekte aid deyil,sinife aid melumatlari dasiyir.Sinif deyisenleri icinde teyin etdiyimiz sinifden hecbir obyekt yaratmamis olsa bele yaddasda yer tutar.Obyekt deyiskenleri ise ancaq bir obyekt teyin etdiyinde yaddasda yer tutar.Bu iki nov deyisenin ayrildigi bir basqa noqte de var.Bu odur ki,sinif deyiseni olan sinifden nece dene obyekt yaratsaq da yaddasda bir dene sinif deyiseni vardir.Indi bunlari bir misalda daha yaxsi anlamaga calisaq.
package com.javagelistir.meqale;

public class Telebe {
private String ad; // Obyekt deyiseni
private int yas;             // Obyekt deyiseni
private String TelebeNo; // Obyekt deyiseni
public static int TelebeSayi = 0; // Sinif deyiseni

public Telebe(String ad, int yas, String TelebeNo) {

this.ad = ad;
this.yas = yas;
this.TelebeNo =TelebeNo;

// Her obyekt yaradildiginda sinif deyisenini artiririq.
TelebeSayi++;
}
}
Burada 3 dene obyekt deyişeni, 1 dene de sınıf deyişeni ehtiva eden bir sinifimiz var ve bu sinifin her bir numunesi yaradildiginda yardiciı (constructor) metod içerisinde sinif deyişeninin deyerinin artırıldığını görürük. Indi asagidaki koda baxaq.
package com.javagelistir.meqale;

public class Program {

public static void main(String args[]) {

System.out.println("Baslangicda telebe sayi: " + Telebe.telebeSayi);

// iki dene telebe obyekti yaradaq
Telebe telebe 1 = new Telebe ("Obi-Wan Kenobi", 19, "2010001");
Telebe telebe 2 = new Telebe ("Anakin Skywalker", 16, "2010002");

int tlbSayi = Telebe. telebeSayi;
System.out.println("telebe sayi (Sinif ustunden): " + tlbSayi);

tlbSayi = telebe 1. telebeSayi;
System.out.println("telebe sayi (Ilk obyekt ustunden): " + tlbSayi);

tlbSayi = telebe 2. telebeSayi;
System.out.println("telebe sayi (Ikinci obyekt ustunden): " + tlbSayi);
}
}
Yuxaridaki kod isledildiyinde asagidaki netice alinacaq.
Baslangicda telebe sayi: 0
Telebe sayi (Sinif ustunden): 2
Telebe sayi (İlk obyekt ustunden): 2
Telebe sayi (İkinci obyekt ustunden): 2
Koddan da göreceyiniz kimi static sinif deyişkenlerine hem sinif adı ile, hem de o sinifden yaradılmış obyekt referansları ile catmaq mümkündür. Ancaq hansi yolla catsaqda, sinif deyişeni tek bir dene olduğu ucun catilan yaddas sahesi eynidir. Helelik hecbir obyekt yaradilmamisken sinif adi ile catdigimiz sinif deyiskenimiz ilk deyeri olan 0-I verecekdir.     Her bir obyekt yaratdigimizda ise sinif değyişkenimiz bir artmaqdadır. Sinif deyişkenleri bu numunede olduğu kimi yaradilan obyekt sayını tutmaq ucun tez tez istifade olunmaqdadir. Numunede 2 dene obyekt yaradib sinif deyisenimizin qiymetini 2 etmis oluruq. Daha sonra bu sıinif deyişkenine hem sinif adı ile, hem de obyekt referansları ile catib mezmunu yazdiririq ve neticede bu 3 catmada da eyni neticeni aliriq.Gorunurki artirila deyisken sinif deyiseni oldugu ucun etdiyimiz deyisiklik obyektde musteqildir.
Static Metodlar
Indi ise static acar sozunun başqa bir islenme qaydasi olan static metodlara baxaq. Normal halda bir sinifdeki bir metodu isletmek isteyirikse, evvelce o sinifi istifade ederek bir obyekt yaratmali, sonra bu obyekt referansı üzerinden metodu çağırmalıyıq. Ancaq deyişkenlerde olduğu kimi metotlar ucun de static kelmesini istifade ederek obyektlerden musteqil sinif metodlari yaza bilerik. Sinif metodlarını çağırmaq ucun o sinifden bir obyekt yaratmagimiz lazim gelmez. Deyişenlere catarmis kimi birbasa sinif adi ile bu metodları çağırmagımız mümkündür. Indi aşağıdaki kodu inceleyek.
package com.javagelistir.meqale;

public class Telebe {

private String ad; // Obyekt deyiseni
private int yas;             // Obyekt deyiseni
private String TelebeNo; // Obyekt deyiseni
public static int TelebeSayi = 0; // Sinif deyiseni

public Telebe(String ad, int yas, String TelebeNo) {

this.ad = ad;
this.yas = yas;
this.TelebeNo =TelebeNo;

// Her obyekt yaradildiginda sinif deyisenini artiririq.
TelebeSayi++;
}
public static int getTelebeSayi () {
return TelebeSayi;
}
}
Bu kodun ilk verdiyim Telebe sinifinden tek ferqi elave olunan yeni bir static metod. İlk numunede public olaraq elan etdiyimiz sinif deyişenimize birbasa adiyla catarken, bu defe sinif deyişenini private edib static bir metod üzerinden catiriq.  Bu sinifi test etmek ucun aşağıdaki kodu isletecik.
package com.javagelistir.meqale;

public class Program {

public static void main(String args[]) {

System.out.println("Baslangicda telebe sayi: " + Telebe.getTelebeSayi());

// iki dene telebe obyekti yaradiriq
Telebe telebe1 = new Telebe("Obi-Wan Kenobi", 19, "2010001");
Telebe telebe2 = new Telebe("Anakin Skywalker", 16, "2010002");

int tlbSayi = Telebe.get Telebesayi();
System.out.println("Telebe sayi: " + tlbSayi);

}
}
Bu kodun cavabi aşağıdaki kimi olacaq.
Baslangicda telebe sayi: 0
Telebe sayi: 2
cavabini verecekdir.Telebe sinifinin içindeki getTelebeSayi() metodu static olduğu ucun, bu sinifin herhansi bir obyektini yaratmaqdan qabaq bu metodu cagirmagimiz mumkundur. Bu sinifden herhansi bir obyekt yaratdiqsa o obyekt referansi uzerinden de teyin etdiyimiz static metodu cagira bilerik,ancaq bu tovsiye edilmir. Eyni şekilde static deyişenlere catarken de obyekt referanslarını istifade ede bilirik,ancaq bunlara da sinif adi ile catmaq kodun oxuna bilmesini artirir.
Static metodlarla bagli bilinmesi lazim olan en önemli şey budur: static metodlar içinden static olmayan bir sinif elementine cata bilmerik!!! Eger bizim static metodumuzun içerisindeki telebesayi deyişeni static olmasaydı program sehv verecekdi. Static bir metod içerisinde static olmayan deyişenlere cata bilmediyimiz kimi, static olmayan metotları da çağıra bilmerik! Bu veziyyetde bele bir numune gosterek.
package com.javagelistir.meqale;

public class Telebe {
private String ad; // Obyekt deyiseni
private int yas;             // Obyekt deyiseni
private String TelebeNo; // Obyekt deyiseni
public static int TelebeSayi = 0; // Sinif deyiseni

public Telebe(String ad, int yas, String TelebeNo) {

this.ad = ad;
this.yas = yas;
this.TelebeNo =TelebeNo;

// Her obyekt yaradildiginda sinif deyisenini artiririq.
TelebeSayi++;
}
public int telebeSayiniTap() {
return telebeSayi;
}

public static int getTelebeSayi() {
return telebeSayiniTap();
}
}
Telebe sinifimize static olmayan telebeSayiniTap() adli yeni bir metot elave etdim. Bu metod sadece telebeSayi adli sinif deyişenimizi döndürür. Buraya diqqet çünki qaydamiz beledir: static metod içerisinden static olmayan bir elemente cata bilmerik. Burada ise static olmayan bir metoddan static bir elemente catiriq. Bu meqsedeuygun bir catmaqdir. Ancaq static metodumuz olan getTelebeSayi() metodu static olmayan telebeSayiniTap() adli metodu çağırır. Qaydamiza göre getTelebeSayi() static bir metot olduğu ucun static olmayan telebeSayiniTap() metodunu çağıra bilmez. Yuxarıdaki kodu compilyasiya etmeye çalışdığımızda “Cannot make a static reference to the non-static method telebeSayiniTap() from the type Telebe” sehvi alariq ve kodumuz islemez. Eyni şekilde getTelebeSayi() metodu içerisinden static olmayan bir deyişkene catmaga çalışsaydıq yene sehv alacaqdiq.
Bunun sebebini bele acixlaya bilerik. Static deyişkenler ve metodlar obyektlerden musteqildir. Yeni ortada heçbir obyekt olmadigi halda static metodlar çağırıla biler ve ya static deyişenlere (sinif degişkenleri) deyer teyin edile biler. Static olmayan sinif elementleri ise ancaq bir obyekt teyin etdiyinde var ola biler. Bu halda da static bir metod içerisinde static olmayan bir deyişene catilmaga çalışıldığında hansi obyektinin deyişenine catacaqdir? O anda ortada heç obyekt bele olmaya biler. Eyni hal static metod içerisinde static olmayan bir metod çağırılmaga çalışıldığında da keçerlidir. Bu sebeble static metodlar içerisinden ancaq static olan sinif elementlerine cata bilerik. Ancaq yuxarıdaki numunede etdiyimiz kimi static olmayan bir metod içinden static elementlere cata bilerik. Çünki static elementler obyekt yaradılmadan daha evvelonsuzda yaradılmışdı.
Static metod içerisinden static olmayan metodu çağıra bilmeyen kimi gedib diger metodu da static etmek o an ucun işe yaraya biler ancaq bu son derece pis bir cixis yoludur. Bele bir halda metodlarınızın dogrudan static olub olmaması lazim geldiyini arasdirmaq lazimdir.
Static Kod Blokları
Static kod blokları static deyişenlere bagli ilk değer qiymetini vermek ucun istifade olunur. Bunlara edebiyyatda “static initializer” deyirler. Static kod blokları sinif deyişenleri yaddasa yüklendikden sonra isledilirler. JVM, o sinife aid bir obyekt yaratmaqdan evvel static kod bloklarının işledilmesini garantiya eder.
package com.javagelistir.meqale;
import java.util.Random;

public class StaticInitializer {

private static int massiv[];
private static int boy = 10;

static {

massiv = new int[boy];
Random rnd = new Random();

for(int i=0; i < boy; i++)
massiv[i] = rnd.nextInt(100);
}
}
Yuxarıdaki koda baxdığımızda static kod bloku içerisinde 0 ile 99 arasında tesadufu teyin olunmus 10 dene saydan ibaret bir massiv yaratdigini görürük. Bu kod bloku sayesinde, bu sinifin deyişkeni olan massiv deyişeni yaradıldığı anda 10 dene tesadufi say ile doldurulur. Static kod blokları içerisinde de, static metodlarda olduğu kimi static olmayan sinif elementlerine catmaq mümkün deyil. Static kod blokları cox istifade olunmadiginda daha cox derinliklere getmeye ehtiyac yoxdur.
Static Import
Static metodların sinif adı istifade edilerek çağırıldığını bilirik. Numunenin Java'da "java.lang" paketinde olan "Math" sinifindeki butun metodlar static metodlardır ve bunları çağırmaq ucun Math.metodAdi() şeklinde bir kod yazmaq lazimdir. Math sinifindeki static metodları kodumuza import edib sinif adını istifade etmeden sadece metod adı ile static metodları çağırmaq isteyirikse aşağıdaki kimi static import istifade ede bilerik. Buradaki tek ferq normalda istifade etdiyimiz import kelmesinin yanına bir de static vermekdir.
package com.javagelistir.meqale;

import static java.lang.Math.*;

public class Program {

public static void main(String args[]) {

System.out.println("Karekok 25: " + sqrt(25));
System.out.println("Log(100): " + log(100));
System.out.println("Pi Sayisi" + PI);
}
}
Kodda görüldüyü kimi normalda Math.sqrt(), Math.PI yazaraq catmagimiz lazim gelen static metod ve deyişkenlere static import istifade edilerek birbasa catmaq sansına sahib olabilirik.

12 Mart 2012 Pazartesi

Final Mövzusu


Final Deyisenler
Final sozunun menasi son demekdir.Java proqramlasdirma dilinde final acar sozu deyisdirilemezliyi saglar. Biz qlobal olan deyiskenlere,metodlara,ve ya siniflere final anlayisini tetbiq ede bilerik.
Qlobal deyiskenler  ile  final anlayisi birlesdiyi zaman diger proqramlasdirma  dillerindeki sabit deyer xususiyyeti ortaya  cixir.Qlobal olan sabit deyiskenler static olsa da olmasa da final xususiyyetine sahib ola biler.Biz diqqetli olmaliyiq ki,final qlobal deyiskenler sadece bir defe qiymet ala bilir.Meselen asagidaki kimi bir numuneye baxaq.
class Qutu {
int i = 0 ;
}
public class FinalNumune {

final int X_SABIT_DEYER = 34 ;
final static int Y_SABIT_DEYER = 35 ;

final int A_SABIT_DEYER = (int)(Math.random()*50);

final Qutu k = new Qutu() ;

public static void main(String args[]) {
FinalNumune fo = new FinalNumune();
//fo.X_SABIT_DEYER = 15 ! SEHV !
//fo.Y_SABIT_DEYER = 16 ! SEHV !
//fo.A_SABIT_DEYER = 17 ! SEHV !
fo.k.i = 35 ; // dogru
// fo.k = new Qutu() ! hata ! 
System.out.println("X_SABIT_DEYER = "+fo.X_SABIT_DEYER) ;
System.out.println("Y_SABIT_DEYER = "+fo.Y_SABIT_DEYER) ;
System.out.println("A_SABIT_DEYER = "+fo.A_SABIT_DEYER) ;
System.out.println("Qutu.i = "+fo.k.i) ;

} 
}
Yuxaridaki numunemizi arasdirsaq x_SABIT_DEYER ve Y_SABIT_DEYER deyiskenlerinin qiymetlerini proqramimizi isletince bile bilerik,amma A_SABIT_DEYER deyiskeninin qiymetini proqrami isletmesek bile bilmerik.Cunki Math sinifine aid  static bir metod olan random(),1 ile 50 arasinda istenilen qiymet ala biler,amma butun final xususiyyetine sahib olan deyiskenlere sadece bir defe qiymet verecek.Grunduyu kimi bu uc deyisen ozlerinin ilk qiymetlerini saxlayirlar.Qutu tipindeki k deyisenini finel etdiyimizde isler biraz qarisir.Biz k deyisenine final ermekle bu deyisenin basqa bir Qutu obyektine baglanmasina icaze vermerik,amma Qutu tipindeki k deyiseninin bagli oldugu obyektin ici deyise biler.numunemizinn neticesi awagidaki kimidir.
X_SABIT_DEYER = 34
Y_SABIT_DEYER = 35
A_SABIT_DEYER = 39
Qutu.i = 35

  
Final Parametrler
Final acar sozunun bir başka isletmek yoluda metod paramtleridir. Metod içerisinde deyiştirilmesini istemediyimiz parametrleri final acar sozu ile teyin ede bilerik. Aşağıdaki kod bunu anlamamıza komek olacaq.
public final class FinalDeneme {

         public void metod1() {

                 int a = 4;
                 System.out.println("a'nin deyeri: " + a);
                 metod2(a);
                 System.out.println("a'nin deyeri: " + a);
         }

         public void metod2(final int b) {
                 b = b*2;
         }
}
Yuxarıdaki kodda metod1 içerisinde teyin etdiyimiz "a" deyişenini parametr olaraq metod2'ye axtaririq ve metod2 içerisinde parametr deyişeninin deyerini deyişdirmeye çalışıriq. Parametr deyişeni "b" final olaraq teyin erdiyimiz ucun b deyişenine metod2 içerisinde herhansi bir emeliyyat vasitesile basqa qiymet almasini temin etmek mümkün deyildir. Bu deyişen metod2 içerisinde sadece oxuna biler,. Bu sebeble yuxarıdaki kod derleme anindan kece bilmeyecek ve aşağıdaki sehvi verecek.
The final local variable b cannot be assigned. It must be blank and not using a compound assignment


Final Metodlar

Final acar sozu metodlara da tetbiq oluna bilir. Final ile yazılan metodlar alt sinifler terefinden override edile bilmezler. Aşağıdaki kod bu veziyyete misaldir.
public class FinalDeneme {

         public final void finalMetod() {
                 System.out.println("Ata sinifdeki finalMetod");
         }
}

public class FinalDenemeSubClass extends FinalDeneme {

         public void finalMetod() {
                 System.out.println("Alt sinifdeki finalMetod");
         }
}
Yuxarıdaki kod derleme zamani aşağıdaki sehvi verecekdir.
Cannot override the final method from FinalDeneme
Göründüyü kimi ata sinifdeki final  ile teyin etdiyimiz  bir metodu alt sinifde override etmeye çalışdığımızda sehv alırıq. Alt siniflerde override edilerek deyişdirilmesini istemediğimiz metodları final olaraq teyin ede bilerik.
Final Sinifler
Final final acar sozu siniflere de tetbiq oluna biler. Bir sinifi aşağıdaki kimi final acar sozu islederek teyin edirikse bu sinifi toretmek mümkün olmaz. Aşağıdaki kodu inceleyek.
public final class FinalDeneme {

         public void metod() {
                 System.out.println("Ata sinifdeki finalMetod");
         }
}

public class FinalDenemeSubClass extends FinalDeneme {

         public void metod() {
                 System.out.println("Alt sinifdekiki finalMetod");
         }
}
Bu numunede  final teyin edilmis bir sinifi toredib içerisindeki metodu alt sinif içerisinde override etmeye çalışıriq. Metod final olaraq teyin edildiyi üçün metodun override edilmesi eslinde mümkün kimi görünür ancaq bu sefer sinifi final olaraq teyin etdiyimiz üçün sinifi toretmek mümkün olmamaqdadir. Çünki final olaraq teyin olunan sinifler heçbir sinif törede bilmez.Belelikle yuxaridaki kimi bir kod da aşagidaki kimi bir sehve yol açacaq.
The type FinalDenemeSubClass cannot subclass the final class FinalDeneme

10 Mart 2012 Cumartesi

Seklin oxunmasi ve yazilmasi


Ba kodlar vasitesi ile sekli bir qovluqdan basqa bir qovluga atmaq ucun istifade olunur.

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;


public class imageio {
 public static void main( String[] args )
    {
     
        try {
            File file = new File("D:\\Ekran\\qrup şəkilləri\\yeni il\\DSC09544.JPG");
            FileInputStream oxumaq= new FileInputStream(file);
            FileOutputStream yazmaq=new FileOutputStream("D:\\Ekran\\oyunlar\\DSC009544.JPG");
            byte b[] = new byte[(int)file.length()];
            int oxuyan= oxumaq.read(b);
            yazmaq.write(b);
            oxumaq.close();
            yazmaq.close();
        }  catch (IOException ex) {
            Logger.getLogger(imageio.class.getName()).log(Level.SEVERE, null, ex);
        }
}

}