Java’da Final Anahtar Kelimesi

Şub 18th, 2010 | Yazar: Özcan Acar | Kategori: Java

Java’da final anahtar kelimesi aşağıda yer alan yapılar için kullanılabilir:

  • Final sınıf değişkenleri: Final olan bir sınıf değişkenine sadece bir kere değer ataması yapilabilir ve bu atama sadece sınıf konstrüktöründe gerçekleşebilir.
  • Final metot parametreleri: Final olarak tanımlanmış bir metot parametresine sadece bir kere değer atanabilir. Metot parametrelerinin tamamen final olarak tanımlamış olmalarında büyük fayda vardır. Bu şekilde parametrenin metot bünyesinde değişikliğe ugrama tehlikesi ortadan kaldırılmış olur.
  • Final metotlar: Final olan bir metot ne alt sınıflarca yeniden yüklenebilir (method overloading) ne de saklı (hidden) tutulabilir.
  • Final sınıflar: Final olan bir sınıf genişletilerek bir alt sınıf oluşturulamaz.

Final anahtar kelimesi Java programcılığında en çok göz ardı edilenlerdendir. En son siz ne zaman final anahtar kelimesini kullandınız?
Final anahtar kelimesi programın daha doğru, hatalara dayanıklı ve performanslı çalışmasını sağlar.

Final anahtar kelimesinin kullanımında yapılan en büyük hatalardan birisi final static olarak tanımlanmış olan bir sınıf değişkenine değistirilebilir bir değerin atanmasıdır. Örneğin aşağıdaki tanımlama yanlıştır, çünkü static değişken final olmasına rağmen, bu değişkene atanan değer, kullanıcı tarafından değiştirilebilir.


public class App
{
    public static final String[] LIST = {"1","2","3"};
    
    public static void main(String[] args)
    {
	String[] list = App.LIST;
	list[0] = "2";
	System.out.println(App.LIST[0]);
    }    
}

Yukarda yer alan main() metodunda final olan LIST degiskeninin ihtiva ettiği array değiştirilmektedir. Bu sorunu ortadan kaldırmak için LIST değişkeni private yapılabilir ve bu değişkeni baz alarak içeriğinin değiştirilemeyeceği bir array değerini geri döndüren metot oluşturulabilir. Bunun bir örneği aşağıda yer almaktadır:


import java.util.Arrays;
import java.util.Collections;
import java.util.List;


public class App
{
    private static final String[] LIST = {"1","2","3"};
    
    
    public static final List<String> getList()
    {
	return Collections.unmodifiableList(Arrays.asList(App.LIST));
    }
    
    public static void main(String[] args)
    {
	List<String> list = App.getList();
	list.remove(0);
	System.out.println(list);
    }    
}

Bu program koşturulduğunda alınacak hata şu şekildedır:


Exception in thread “main” java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableList.remove(Collections.java:1162)
at test.App.main(App.java:22)

Bu şekilde final olarak tanımladığımız LIST değişkenin ihtiva ettiği değerleri üzerinde oynama yapmak mümkün değildir. getList() metodu bünyesinde Collections.unmodifiableList() ile içeriğinin değiştirilmesi mümkün olmayan bir liste oluşturulmaktadır.


EOF ( End Of Fun)
Özcan Acar

Share Button

Özcan Acar

Bilgisayar mühendisi olan Özcan Acar 1997 yılından beri programcı olarak çalışıyor.

KurumsalJava.com, SmartHomeProgrammer.com ve Mikrodevre.com adresleri altında blog yazıyor. Kurduğu BTSoru.com'da ona yazılımla ile ilgili sorularınızı yöneltebilirsiniz. Pratik Programcı Yayınları bünyesinde Pratik Spring, Pratik Agile, Pratik Git ve Design Patterns ismini taşıyan kitapları bulunmaktadır. 21.12.2009 tarihinde Java Champion olarak seçildi.
  • Share/Bookmark
4 yorum | 18.875 kez okundu |

1 Yıldız2 Yıldız3 Yıldız4 Yıldız5 Yıldız (3 değerlendirme, ortalama: 5, toplam oy 5)
Loading ... Loading ...
Tags: ,

4 YORUM “Java’da Final Anahtar Kelimesi”

  1. Aysun ALTUNKAYNAK diyor ki:

    Teşekkürler çok faydalı bir not olmuş, kitaplarınız dan da faydalanıyoruz.

  2. Burhan ARAS diyor ki:

    Merhaba,
    Bu yöntemi adı Defensive Copy Patterndir. Bununla ilgili ufak bir yazı kaleme almıştım zamanında :
    https://www.dropbox.com/s/q1537xfgjgnlwyk/Defensive%20Copy%20Pattern.pdf

    Buradan bakabilirsiniz. İyi çalışmalar..

  3. Ahmet Burcak diyor ki:

    Teşekkürler çok açıklayıcı olmuş. Yeni başlayanlar için şu yazıyı da önerebilirim: http://www.seckintozlu.com/456-javada-final-anahtar-kelimesi-ve-kullanimi.html

  4. msoner diyor ki:

    teşekürler hocam

BU YAZI İÇİN BİR YORUM YAPABİLİRSİNİZ.