Java Eğitimi 31-Static ve Final Anahtar Kelimeleri

Herkese merhaba,

Bir önceki yazıda Java’da erişim belirleyicileri konusunu görmüştük. Bu yazıda ise Java programa dilinde kullanılan “final” ve “static” sözcüklerinden sizlere bahsedeceğim. İsterseniz ilk önce static’ten başlayalım.

STATIC ANAHTAR KELİMESİ

Java dilinde static anahtar kelimesinin önemi oldukça fazladır. Ama ne amaçla kullanıldığı birçok kişinin aklını karıştırabiliyor.

Static kelimesi hem metotlar hem de değişkenler için kullanılabilir. Metotlarda genellikle nesne oluşturmadan çağrılır. Değişkenleri ele aldığımızda “nesne değişkeni” adında bir kavram ile karşılaşırız. Kısaca bunu açıklayarak devam edeyim. Bir sınıf düşünün, sınıfın içinde de değişkenler yer alsın. Bu değişkenler her yeni nesne için tekrar tekrar oluşturulur. İşte bu durum “nesne değişkeni” olarak tanımlanır. Peki bu durumu engelleyemez miyiz? Yani o nesneleri sınıf içinde genel bir değişken şeklinde tanımlayamaz mıyız? Tanımlarız, işte bu durum static anahtar kelimesi ile mümkün olur.  

Örneğin sayı adında bir değişkenimiz olsun ve bu değişkenin değerini artıran programı yazmak isteyelim.

public final class nesne {

public static int sayı = 0;
public nesne() {
sayı++;
}

}

Yukarıdaki kodlar ile sayı değişkenini integer olarak atadık ve artırma işlemini yazdık. Gördüğünüz gibi static ve final değişkenlerini kullandık. Diğer sınıfı da oluşturalım ve ekrana yazdırma işlemlerini tamamlayalım.


public class main {
public static void main(String[] args) {

nesne nesne_1 = new nesne();
System.out.println(nesne_1.sayı);

nesne nesne_2 = new nesne();
System.out.println(nesne_2.sayı);

nesne nesne_3 = new nesne();
System.out.println(nesne_3.sayı);

}
}

Sürekli nesne üretmek istediğimiz için bunu static ile yaptık. Static ile yazmasaydık her nesne için ayrı bir sayı değişkeni oluşturmamız gerekecekti ve her seferinde sayı değeri önce 0 olacaktı, sonra da 1 olacaktı. Yani kendini tekrar etmiş olacaktı. Değişkeni static ile oluşturduğumuz için sınıfa ait bir “sayı” isimli bir değişken yarattık. 

Genel bir özetini yazacak olursam; değişkenleri bellekten okumak istediğimizde static kelimesine ihtiyaç duyarız. Ama bu değişkenlerle alakalı her eğişken birbirinden farklı olmalıdır.(nesne_1, nesne_2 gibi) 

FINAL ANAHTAR KELİMESİ

Final anahtar kelimesi çok bilinmez ve kullanılmaz. Ama bu kelimenin kullanım yeri bilindiğinde vazgeçemeyeceğiniz bir kelime haline gelir.

Final anahtar kelimesi de static kelimesinde olduğu gibi değişkenlere, metotlara ve bazı sınıflara uygulanabilir. Final ifadesi kullanıldığında aklınıza “değiştirilemez” ifadesi gelebilir. Final kelimesini değişkenler için kullandığınızda değeri sonradan değiştirilemeyen değişkenler oluşturdunuz demektir. Değişkenleri final şeklinde tanımladığımızda sadece bir kere değer ataması yapılır. 

Örneğin;

public class deger{
final int sayı=8;
int sayı=5;

}

Yukarıdaki gibi bir kod kullanımı hatalıdır. Çünkü ilk önce sayı değişkeni final ile 8 olarak tanımlanıyor. Yani bu değiştirilemez anlamına geliyor. Ama bir alt satırda sayı değişkeninin değeri 5  olarak değiştirilmek isteniyor. Bu yüzden böyle bir kullanım söz konusu olamaz. 

Final şeklinde bir sınıf açtınız diyelim. Final sınıflar extend edilemez. Yani override kullanamayız. (final olan bir sınıf alt sınıf oluşturamaz)

Metotlarda final kelimesini kullanmak final parametrelerinin değerlerini değiştirmeyi engeller. 

Peki neden kullanılır?

Programın daha doğru, hatalara karşı dayanıklı, verimli ve performanslı çalışmasını sağlar. Tasarımın iyi olması için de kullanılır. 

Final’in kullanımına da bir örnek verelim. Örneğin dairenin alanını hesaplayan bir program yazalım.

public class ornek {

static final double pi= 3.14;

int yaricap;

static int daire;

double cevre_hesaplama(int r) {

int yaricap = r;

double alan = 2 * pi * yaricap;

return alan;

}

}
public class daire {
public static void main(String[] args) {

ornek daire = new ornek();

double sonuc = daire.cevre_hesaplama(3);

System.out.println("Dairenin alanı: " + sonuc);

}
}

Bu örnekte pi sayısının değerini sabitlemiş olduk. Program içerisinde pi’nin değerini değiştirmek istersek hata ile karşılaşırız. 

Yorum bırakın