Konular

Final Özelliğinin Kullanımı

Final kelimesinin sözlük anlamı "son" demektir. Java programlama dilindeki final özeliği de, sözlük anlamıyla paralel bir anlam taşır. Java programlama dilinde final anahtar kelimesi değiştirilemezliği simgeler. Değiştirilemezliğin seçilmesi iki sebepten dolayı olabilir, birincisi tasarım ikincisi ise verimlilik;
Global olan alanlara, yordamlara ve sınıflara final özelliğini uygulayabiliriz.
 
class Kutu {
    int i = 0;
}

public class FinalOrnek {

    final int X_SABIT_DEGER = 34;
    final static int Y_SABIT_DEGER = 35;
    final int A_SABIT_DEGER = (int) (Math.random() * 50);
    final Kutu k = new Kutu();

    public static void main(String args[]) {
        FinalOrnek fo = new FinalOrnek();
       // fo.X_SABIT_DEGER = 15 ! Hata !
       // fo.Y_SABIT_DEGER = 16 ! Hata !
       // fo.A_SABIT_DEGER = 17 ! Hata !

        fo.k.i = 35; // doğru
       // fo.k = new Kutu() ! hata !
        System.out.println("X_SABIT_DEGER = " + fo.X_SABIT_DEGER);
        System.out.println("Y_SABIT_DEGER = " + fo.Y_SABIT_DEGER);
        System.out.println("A_SABIT_DEGER = " + fo.A_SABIT_DEGER);
        System.out.println("Kutu.i = " + fo.k.i);
    }
}
 
Verilen örnekte X_SABIT_DEGER ve Y_SABIT_DEGER alanlarının değerlerini derleme anında bilenebilmesi mümkündür ama A_SABIT_DEGER alanının değerini derleme anında bilmek zordur (Math sınıfına ait statik bir yordam olan random(), 1 ile 50 arasında rasgele sayılar üretir), bu alanın değeri çalışma anında belli olacaktır. Bir global alana, final ve statik özellikler belirtirseniz, bu global alanımız, bu sınıfa ait olan tüm nesneler için tek olur (bkz: 3. bölüm, statik alanlar) ve değeri sonradan değiştirilemez.

Final özelliğinin etkisi, ilkel tipteki alanlar ve sınıf tipindeki alanlar farklıdır. Yukarıdaki örneğimizi incelerseniz, X_SABIT_DEGER, Y_SABIT_DEGER, A_SABIT_DEGER alanları hep ilkel tipteydi; yani değerlerini kendi üzerlerinde taşıyorlardı. Kutu tipinde k alanımızı final yaptığımızda olaylar biraz
değişir, Kutu sınıfı tipindeki k alanını final yaparak, bu alanın başka bir Kutu nesnesine tekrardan bağlanmasına izin vermeyiz ama Kutu sınıfı tipindeki k alanının bağlı olduğu nesnenin içeriği değişebilir.

Uygulamanın sonucu aşağıdaki gibi olur:
X_SABIT_DEGER = 34
Y_SABIT_DEGER = 35
A_SABIT_DEGER = 39
Kutu.i = 35

Argümanın final olması

 
public class FinalParametre {

    public static int topla(final int a, final int b) {
        // a = 5 ! Hata !
       // b = 9 ! Hata !
        return a + b;
    }

    public static void main(String args[]) {
        if ((args.length != 2)) {
            System.out.println("Eksik veri Girildi");
            System.exit(-1); // Uygulamayi sonlandir
        }
        int a = Integer.parseInt(args[0]);
        int b = Integer.parseInt(args[1]);
        int sonuc = FinalParametre.topla(a, b);
        System.out.println("Sonuc = " + sonuc);
    }
}
 

        Bu uygulamamız, dışarıdan iki parametre alarak bunları ilkel olan int tipine çeviriyor. Eğer dışarıdan eksik veya fazla parametre girilmiş ise kullanıcı bu konuda uyarılıyor. Daha sonra elimizdeki değerleri FinalParametre sınıfının statik olan topla() yordamına gönderiyoruz. Bu yordama gönderilen
parametrelerin değiştirilmesi, final ifadeden dolayı imkansızdır.

Kısacası final yordamlar iptal edilemezler

 
class A {

    public final void ekranaYaz() {
        System.out.println("A.ekranaYaz()");
    }
}

class B extends A {

    public void ekranaYaz() {
        System.out.println("B.ekranaYaz()");
   
}
 
 
A sınıfına ait ekranaYaz() yordamı, A sınıfından türetilmiş B sınıfının ekranaYaz() yordamı tarafından iptal edilemez (overriding). FinalMetod.java örneğini derlemeye çalıştığımızda aşağıdaki hata mesajını alırız:

Final özelliğinin kullanımı

Final Sınıflar

Bir sınıfı final yaparak, bu sınıftan türetilme yapılmasını engellemiş oluruz. Bir sınıfın final yapılmasının iki sebebi olabilir, birincisi tasarım, ikincisi ise verimlilik. final sınıflar komposizyon yöntemi ile kullanabilirler.

 
final class Televizyon {

    public void kanalBul() {
    }
}
/*
class SuperTelevizyon extends Televizyon{ // Hatali
}
 */


class Ev {

    int oda_sayisi = 5;
    Televizyon tv = new Televizyon();

    public static void main(String args[]) {
        Ev e = new Ev();
        e.tv.kanalBul();
    }
}
 
 
Yorumunuzu Ekleyin
Final Özelliğinin Kullanımı Yorumları +1 Yorum
  • fatoş
    1
    fatoş
    final terimi hangisinde kullanılmaz ?

    1) yapıcı metotlarda

    2) interface'lerde

    3) public olarak tanımlanmış yapılarda

    4) abstract sınıflarda

    (yardımcı olursanız çookk çokk sevinirim)
    15 Ocak 2018 16:43:14, Pazartesi

Java Değişken Tipleri

Byte, short, int, long, float, double, boolean, char, string

59,424 Okunma Henüz yorum yapılmamış 04/11/2009 13:11:31

Java Diziler

Javada diziler nesnedirler, cdeki gibi hafızada yer kaplayan pointer değillerdir. Javada diziler, cye göre daha güvenilirdir. Dizilerin elemanlarına gelişigüzel değerler atayamazsınız. Java, dizi elemanlarını sırasıyla kontrol eder. Dolayısıyla arada değer atanmamış bir elemana rastlanırsa hata oluşur. Bu da cde çıkan hafıza bozulmalarını önler. Javada dizi kullanmak için ilk önce dizinin tipi verilir. Tip verilirken dizinin büyüklüğü belirtilmez

57,261 Okunma 2 Yorum 19/11/2007 15:13:25

Javada Fonksiyonlar

Değer alan ve geriye değer döndüren fonksiyonlar

55,225 Okunma Henüz yorum yapılmamış 01/04/2010 14:39:09

Stringleri Karşılaştırma

Stringler bilinen = operatörleri ile karşılaştırılmazlar, ayrıca == ve != operatörleride stringler içindeki karakterleri karşılaştırmazlar

40,810 Okunma Henüz yorum yapılmamış 18/10/2007 12:43:49

Java Da Operatörler

Aritmetik operatorler 4 işlem ve mod, arttırma operatorleri, ilişkisel operatorler, mantıksal operatorler, kısa devre mantıksal operatorler

39,877 Okunma Henüz yorum yapılmamış 02/12/2009 13:58:19

J2ee, j2se, j2me Nedir?

J2ee,j2se,j2me hakkında bilgi

36,165 Okunma 1 Yorum 21/10/2009 17:00:15 16/07/2014 17:00:35

Java Terimleri

Java, birbirinden farklı aygıtlarda çalışabilen, bu aygıtlar arasında iletişimi kolay hale getiren programlama dili ve platformudur. Java diliyle yazılmış programlar, Windows, UNIX, Mac işletim sistemi yüklü bilgisayarlarda hiç bir değişiklik yapmayı gerektirmeden çalışabilmektedirler

35,579 Okunma Henüz yorum yapılmamış 16/10/2007 13:23:36

Javada Diziler

Java da diziler nesnedir; içerisinde belirli sayıda eleman bulunur. Eğer bu sayı sıfır ise, dizi boş demektir. Dizinin içerisindeki elemanlara eksi olmayan bir tam sayı ile ifade edilen dizi erişim indisi ile erişilir. Bir dizide n tane eleman varsa dizinin uzunluğu da n kadardır; ilk elemanın indisi/konumu 0’dan başlar, son elemanı ise n-1’dir.

30,856 Okunma 1 Yorum 14/04/2008 11:01:20

for Döngüsü

28,625 Okunma Henüz yorum yapılmamış 30/12/2009 11:02:00

Java 3D

Son yıllarda çoklu ortamda ilerleme kaydeden Java, Java3D ile yüksek performans isteyen üç boyutlu grafiklerde de 'Ben varım!' diyor.

27,455 Okunma Henüz yorum yapılmamış 26/01/2009 22:23:10

while döngüsü

Dizilerin olmazsa olmazı

26,736 Okunma Henüz yorum yapılmamış 17/12/2009 10:53:28

Java Operatörleri

Mod Operatörü, Aritmetik Atama Operatörü, Arttırma Azaltma Operatörleri, Iliskisel Operatorler ve Kısa Devre Iliskisel Operatörler, Kısa devre iliskisel operatorler, ? Operatoru

26,712 Okunma Henüz yorum yapılmamış 04/12/2009 12:11:34

Yükleniyor...