Jan 1, 0001  

title: Java Dersleri 23 - Final Anahtar Kelimesi link: http://orhanbalci.net/tr/?p=1187 author: admin description: post_id: 1187 created: 2013/03/12 14:23:22 created_gmt: 2013/03/12 11:23:22 comment_status: open post_name: java-dersleri-23-final-anahtar-kelimesi status: publish post_type: post

Java Dersleri 23 - Final Anahtar Kelimesi

Merhabalar bu kısa derste javada final anahtar kelimesinin kullanım alanlarını açıklamaya çalışacağım. Java’da final anahtar kelimesi farklı üyelere uygulandığında farklı anlamlara gelmektedir. Genellikle c++ const anahtar kelimesiyle aynı olduğu düşünülsede aksine çok büyük farkları vardır. Final anahtar kelimesinin kullanıldığı yerlerden birincisi sınıf tanımlamalarıdır (class decleration). Final olarak nitelenen bir sınıftan türetme yoluyla yeni alt (çocuk) sınıflar üretilemez. Genellikle framework sınıflarında hatta java kütüphanelerinde karşımıza çıkan bu kullanımı şu şekilde örnekleyebiliriz. [java] package net.orhanbalci.finalkeyword; public final class FinalClass { protected int myMemberVariable; public FinalClass() { } } [/java] yukarıdaki sınıftan bir alt (çocuk) sınıf türetmeye çalışalım [java] package net.orhanbalci.finalkeyword; public class ChildClass extends FinalClass { } [/java] bu sınıfı derlemeye çalıştığımızda compiler tarafından verilen hata mesajı şu şekildedir: java: cannot inherit from final net.orhanbalci.finalkeyword.FinalClass Buradan yola çıkarak final kelimesinin method tanımlamalarında kullanıldığında ne işe yaradığını tahmin etmek güç değil aslında. Final anahtar kelimesi method tanımlamalarında kullanıldığında methodun alt (çocuk) sınıflarda override edilmesini engeller. Şu şekilde final bir methodumuz olsun : [java] package net.orhanbalci.finalkeyword; /** * User: ob005273 * Date: 12.03.2013 * Time: 13:17 * Kullanıldığında http://orhanbalci.net adresi referans verilmelidir */ public class FinalMethod { private int a = 5; public final int getA() { return a; } } [/java] Alt sınıfta getA() metodumuzu override etmeye çalışalım. [java] package net.orhanbalci.finalkeyword; /** * User: ob005273 * Date: 12.03.2013 * Time: 13:18 * Kullanıldığında http://orhanbalci.net adresi referans verilmelidir */ public class OverrideFinalMethod extends FinalMethod { public OverrideFinalMethod() { } public int getA() { return 1300; } } [/java] Compilerin verdiği hata mesajı şu şekilde olacaktır. java: getA() in net.orhanbalci.finalkeyword.OverrideFinalMethod cannot override getA() in net.orhanbalci.finalkeyword.FinalMethod overridden method is final Son olarak final değişkenlere değinelim. Final olarak tanımlanan sınıf üye değişkenlerine ya tanımlandıkları anda değer atanmalıdır yada constructor içinde değer atanmalıdır. Final snıf üye değişkenlerine sadece bir defa değer ataması yapılabilir. Final üye değişkenine değer atanmadığı durumda compile time hatası oluşacaktır. Örneğin : [java] package net.orhanbalci.finalkeyword; public class FinalMemberVariable { private final int a; private final int b = 5; private final int c; public FinalMemberVariable(int a) { this.a = a; } } [/java] Bu sınıf tanımında final a değişkenine constructor içinde ilk değeri verilmiş, b değişkenine ise tanımlama esnasında ilk değer verilmiştir. Bu değişkenler java kurallarına uygun olarak tanımlanmıştır. Fakat c değişkeninine değer ataması yapılmadığı için compile time hatası oluşacaktır. Compiler hata mesajı şu şekildedir : java: variable c might not have been initialized Sınıf üye değişkenlerinden sonra method kapsamında tanımlanan final değişkenlere değinerek dersi sonlandıralım. Method kapsamında tanımlanan final değişkenlere tanımlandıkları anda yada method içerisinde kullanımından önce herhangi bir noktada değer ataması yapılmalıdır. Yine yukarıdaki kullanımlarla ortak olduğu şekilde final değişkene birden fazla atama yapmaya çalışmak hata olacaktır. [java] public void FinalMethodScope() { final int d; d = 3; System.out.println(d); d = 5; System.out.println(d); } [/java] Bu örnekte ilk üç satırda problem olmamakla birlikte final edğişkene 2. defa atama yapmak istediğimizde aşağıdaki compiler hatasını alacağız java: variable d might already have been assigned [ad#Yazi Ici Buyuk]