Sponsor Reklam 


18.09.2008 (02:07)

 final ve finally Anahtar Sözcükleri, Keywords 
final anahtar sözcüğü, değişkenin içeriğinin değiştirilmesi engellemek için tanımlanmıştır. Bu değişkenler sabit değişkenlerdir ve C, C++ veya C# dillerindeki const ifadesine benzer.

final değişkenlerine bir ilk değer ataması yapılması zorunludur. Ayrıca bu değişken isimlerinin büyük harfle yazılması yaygın kullanılmakta ve tavsiye edilmektedir.

Örnek bir final değişken:
final double PI = 3.141592653589793;

final keyword'ü değişken tanımı dışında kalıtım'da da (inheritance) kullanılmaktadır. Burdaki kullanımı, metotların geçersiz kılınmasını (method overriding) önlemek içindir. Eğer geçersiz kılınmak istenirse derleme zamanı hatası (compile time error) ile karşılaşılır. Bunun dışında bir de sınıfların türetilmesini (genişletilmesini) önlemek amacıyla kullanılmaktadır.

final class A {
  // tanımlamalar
}

A sınıfı final olarak tanımlandığı için onun alt sınıfı oluşturulamaz. Bu nedenle şu örnek yanlış olur:

class B extends A {
  // tanımlamalar
}

final bir değişken ya da metot performans artışı sağlar. Bu değişkenler bellekte örnek başına yer tutmaz. Bu nedenle de sabit olmak zorundadır. Metotlara yapılan çağrılar çalışma zamanında dinamik olarak çözülür (dynamic binding). Buna geç bağlama (late binding) da denir. Ancak final metotlar geçersiz kılınamadığı için bunlar için yeni bytecode'lar oluşturulmaz ve bu nedenle zaman kaybı olmaz. Bu metotlara yapılan çağrılar bu nedenlerle derleme zamanında çözümlenebilir. Bu bağlamaya da erken bağlama (early binding) olarak nitelendirilir. Bu şekilde performans artışı sağlanmış olur.

finally anahtar sözcüğü ise istisna (exception) yönetiminde try - catch mekanizmasında yapılacak olan son işlemi içeren bloğu oluşturur.

Şu örnek finally kullanımını görüyoruz. Metot, a ve b sayıları için tam sayı bölmesi yapıp sonuca b'yi ekler. Sıfıra bölme durumunda ise sıfır döndürür:

public int bolTopla(int a, int b) {
  try {
    a = a / b;
  } catch (ArithmeticException ae) {
    a = 0;
    System.out.println("Bölme Hatası Oluştu");
  } finally {
    a = a + b;
  }
  return a;
}

Imza: admin








Yazilar kaynak gosterilmeden kopyalanamaz © www.kodcu.net // Twitter