blog posts

Java'da Final kavramının öğretilmesi

Java’da Final kavramının öğretilmesi + pratik örnek

Final anahtar kelimesi programlamanın çeşitli alanlarında kullanılır. Final, yalnızca değişkenlere, yöntemlere veya sınıflara uygulanabilen erişimsiz bir değiştirici görevi görür. Yazılı dergideki bu makalede, Java’da Final’i incelemek ve Java nesne yönelimli dilindeki misyonunu kullanıcılar için açıklığa kavuşturmak istiyoruz. O halde bizimle kalın.

 

Java’da Final nedir ve kullanımı nedir?

Java’da Final anahtar sözcüğü, değişkenlerin, yöntemlerin veya sınıfların değiştirilememesini veya genişletilememesini sağlayacak özel özelliklere sahip kritik bir değiştirici görevi görür. Java’daki Final anahtar sözcüğünün temel özellikleri şunlardır:

  • Son değişkenler : Bir değişken final olarak bildirildiğinde, değeri başlatıldıktan sonra değişmez olacaktır. Bir değer atandıktan sonra değiştirilemez; bu da onu sabitleri tanımlamak veya hassas verileri kazara yapılan değişikliklerden korumak için uygun hale getirir.
  • Son Yöntemler : Bir yöntemi final olarak bildirmek, onun alt sınıflar tarafından geçersiz kılınamayacağı anlamına gelir. Bu özellik özellikle bir sınıf içindeki kritik işlevlerin korunmasında kullanışlıdır ve yöntem davranışının tüm alt sınıflarda tutarlı kalmasını sağlar.
  • Final Sınıfları: Bir sınıf final olarak işaretlendiğinde, miras alınamaz hale gelir; bu, başka hiçbir sınıfın onu genişletemeyeceği anlamına gelir. Bu özellik, sınıf uygulamasının bütünlüğünü korumak ve alt sınıflardan istenmeyen değişiklikleri önlemek açısından değerlidir.
  • Başlatma : Son değişkenler bildirim zamanında veya sınıf yapıcısında başlatılmalıdır. Bu, değişkene belirli bir değer atanmasını ve başlangıç ​​değeri olmadan bırakılmamasını sağlar.
  • Performans optimizasyonu : Final’in değişkenlerde, yöntemlerde veya sınıflarda kullanılması bazen performans optimizasyonuna yol açabilir. Derleyici, değişmezlik veya genişletilemezlik temelinde belirli varsayımlarda bulunarak daha iyi kod optimizasyonu sağlayabilir.
  • Geliştirilmiş güvenlik : Kritik verilerde veya davranışlarda yetkisiz değişiklikleri önlediği için güvenlik, Java’daki Final anahtar sözcüğü kullanılarak geliştirilebilir. Bu, özellikle hassas işlemlerle veya güvenli ortamlarla uğraşırken kullanışlıdır.

 

 

Genel olarak, Final anahtar sözcüğü Java’da geliştiricilere değişmezliği uygulama, yöntem geçersiz kılmalarını önleme ve sınıf mirasını kısıtlama yetkisi veren değerli bir araçtır. Programcılar bu özellikleri kullanarak sağlam ve bakımı kolay uygulamalar oluştururken kod güvenilirliğini, performansını ve güvenliğini artırabilir.

İpucu: Java’daki Final anahtar sözcüğünü daha iyi anlamak için verilen örnekleri Netbeans IDE gibi bir ortamda oluşturup çalıştırmayı deneyin.

 

Nihai değişkenler

Java’da Final anahtar sözcüğü kullanılarak bir değişken bildirildiğinde değeri sabit kalır ve değiştirilemez. Bu davranış, değişkenin etkili bir şekilde sabit gibi davranmasını sağlar. Bir Final değişkeninin bildirim sırasında veya yapıcıda başlatılması gerektiğine dikkat etmek önemlidir. Son değişken bir referans türüyse, başka bir nesneye atıfta bulunacak şekilde referansı kaldırılamaz ancak başvurulan nesnenin iç durumu değiştirilebilir. Örneğin, son dizi veya koleksiyon durumunda öğeler eklenebilir veya kaldırılabilir.

Java’da, sabit adlandırma kuralına uygun olarak Final değişkenlerini büyük harflerle ve sözcükleri alt çizgilerle ayırarak belirtmek iyi bir uygulama olarak kabul edilir. Bu, kodun okunabilirliğini ve netliğini artırır.

Genel olarak, bir değişken Java’da Final olarak bildirildiğinde değeri değişmez ve bir sabite benzer olacaktır. Değişkenin başlatılması gerekir ve eğer bir referans ise, başka bir nesneye işaret edecek şekilde atanamaz ancak nesnenin iç durumu yine de değiştirilebilir.

final int THRESHOLD = 5;
// Final variable
final int THRESHOLD;
// Blank final variable
static final double PI = 3.141592653589793;
// Final static variable PI
static final double PI;
// Blank final static variable

Son değişkeni başlat

Java’da bir son değişkenin düzgün bir şekilde başlatıldığından emin olmak için, bildirim sırasında ona doğrudan veya bir atama ifadesi aracılığıyla bir değer atanmalıdır. Son değişkenin başlatılmaması derleme zamanı hatasıyla sonuçlanır. Bir son değişkeni başlatmanın üç yolu vardır:

  • Bildirim sırasında başlatma : Bu en yaygın yaklaşımdır. Bildirim zamanında son değişkene bir değer atayabilirsiniz. Bu hem normal hem de boş son değişkenler için kullanılabilir.
  • Bir örnek başlatıcı bloğunda veya yapıcıda başlatma : Bildirilen ancak bildirim sırasında başlatılmayan boş bir Final değişkeni durumunda, buna bir örnek başlatıcı bloğunun (bir sınıftaki bir kod bloğu) veya Yapıcının içinde bir değer atanabilir. Bir sınıfın birden fazla oluşturucusu varsa, derleme zamanı hatasını önlemek için void final değişkeninin her birinde başlatılması gerekir.
  • Statik bir blok içinde başlatma (boş son statik değişkenler için) : Java’daki bir Final değişkeni hem statik hem de boşsa (yani, bildirildiğinde başlatılmamışsa), ona statik bir blok içinde bir değer atanabilir. Statik blok, sınıf yüklendiğinde bir kez çalıştırılan bir kod bloğudur.

Bu yöntemleri kullanarak bir Final değişkeni doğru şekilde başlatılabilir. Derleme hatalarını önlemek ve değişkenin geçerli bir değere sahip olmasını sağlamak için tüm yapıcıların ve statik blokların (varsa) boş Final değişkenlerini başlatmasını sağlamak önemlidir. Aşağıdaki örnek bu kavramı anlamak için önemlidir.

// Java Program to demonstrate Different
// Ways of Initializing a final Variable

// Main class
class GFG {

	// a final variable
	// direct initialize
	final int THRESHOLD = 5;

	// a blank final variable
	final int CAPACITY;

	// another blank final variable
	final int MINIMUM;

	// a final static variable PI
	// direct initialize
	static final double PI = 3.141592653589793;

	// a blank final static variable
	static final double EULERCONSTANT;

	// instance initializer block for
	// initializing CAPACITY
	{
 CAPACITY = 25;
	}

	// static initializer block for
	// initializing EULERCONSTANT
	static{
 EULERCONSTANT = 2.3;
	}

	// constructor for initializing MINIMUM
	// Note that if there are more than one
	// constructor, you must initialize MINIMUM
	// in them also
	public GFG()
	{
 MINIMUM = -1;
	}

}

Java’da Final değişkeni ne zaman kullanılır?

Normal bir değişken ile Java son değişkeni arasındaki temel fark, normal bir değişkene değerinin birden çok kez atanabilmesi, son değişkenin değerinin ise atamadan sonra sabit kalmasıdır; Bu nedenle programın yürütülmesi sırasında sabit kalması amaçlanan değerler için final değişkenleri kullanılmalıdır. Final anahtar sözcüğünü kullanarak, bir değişkenin değerinin değişmeden kalmasını sağlayabiliriz, bu da onun sabit doğasını gösterir.

 

Çalışma önerisi: Java’da HashMap kavramını tanımak

Final değişkeninin referansı nedir?

Final değişkeni bir nesneye referans olarak hareket ettiğinde buna referans son değişkeni denir. Örneğin, son StringBuffer değişkenini aşağıdaki gibi bildirmeyi düşünün:

final StringBuffer sb;

Bu durumda, son değişken ‘sb’ bir StringBuffer nesnesine referanstır. Bildiğimiz gibi bir Final değişkeni başka bir nesneye yeniden referans verilemez. Ancak Final değişkeninin referans verdiği nesnenin dahili durumunun yine de değiştirilebileceğini unutmamak önemlidir. Bu, StringBuffer nesnesinin içeriğini ekleme veya değiştirme gibi işlemlere izin verildiği anlamına gelir.

Kısaca final değişkenlerini kullanırken değerlerinin sabit kalmasını sağlıyoruz. Bu, özellikle program boyunca değişmemesi gereken değerlerle uğraşırken kullanışlıdır. Ayrıca, Final değişkeni bir nesneye referans olduğunda değişkenin kendisi tekrar başka bir nesneye referans veremez. Ancak nesnenin iç durumu yine de değiştirilebilir. Aşağıdaki örnek bu kavramı anlamak için çok önemlidir.

// Java Program to demonstrate
// Reference of Final Variable
// Main class
class GFG {

	// Main driver method
	public static void main(String[] args)
	{
// Creating an object of StringBuilder class
// Final reference variable
 final StringBuilder sb = new StringBuilder("Maktab");

// Printing the element in StringBuilder object
 System.out.println(sb);

// changing internal state of object reference by
// final reference variable sb
 sb.append("Khooneh");

// Again printing the element in StringBuilder
// object after appending above element in it
 System.out.println(sb);
	}
}

Diziler Java’daki nesneler olduğundan, geçişsizlik özelliği diziler için de geçerlidir. final anahtar sözcüğünü taşıyan dizilere final dizileri de denir ve bu kavramı anlamak için aşağıdaki örnek verilmiştir.

// Java Program to Demonstrate Re-assigning
// Final Variable will throw Compile-time Error

// Main class
class GFG {

	// Declaring and customly initializing
	// static final variable
	static final int CAPACITY = 4;

	// Main driver method
	public static void main(String args[])
	{

// Re-assigning final variable
// will throw compile-time error
 CAPACITY = 5;
	}
}

Bir Final değişkeni “yöntem/yapıcı/blok”ta oluşturulduğunda, bunun yerel Final değişkeni olarak adlandırıldığını ve oluşturulduğu yerde başlatılması gerektiğini unutmayın. Yerel Final değişkeni için aşağıdaki örneğe bakın.

// Java program to demonstrate
// local final variable

// Main class
class GFG {

	// Main driver method
	public static void main(String args[])
	{
// Declaring local final variable
 final int i;

// Now initializing it with integer value
 i = 20;

// Printing the value on console
 System.out.println(i);
	}
}

Java’daki Final değişkeni hakkında birkaç not

Java’daki final değişkenleri hakkında aşağıdaki önemli noktalara dikkat etmek önemlidir:

  1. C++’daki const ile Java’daki final değişkenleri arasındaki fark : C++’da const değişkenlerine bildirildiğinde bir değer atanmalıdır; Java’da ise final değişkenlerine daha sonra ancak yalnızca bir kez değer atanabilir. Bu, Java’daki Final değişkenlerinin kendilerine ne zaman değer atanacağı konusunda esneklik sunduğu anlamına gelir.
  2. Foreach döngüsüyle final : Final anahtar sözcüğünü foreach döngüsüyle (gelişmiş for döngüsü olarak da bilinir) kullanmak Java’da geçerli bir ifadedir. Bu, döngü değişkeni olarak Final değişkenini kullanarak bir küme veya dizi üzerinde yineleme yapmanıza olanak tanır.

Bu noktaları anlayarak Java’daki final değişkenlerini doğru bir şekilde kullanabilir ve kodumuzda bunlardan faydalanabiliriz.Bunu anlamak için aşağıdaki örnek önemlidir:

// Java Program to demonstrate Final
// with for-each Statement

// Main class
class GFG {

	// Main driver method
	public static void main(String[] args)
	{

// Declaring and initializing
// custom integer array
 int arr[] = { 1, 2, 3 };

// final with for-each statement
// legal statement
 for (final int i : arr)
 System.out.print(i + " ");
	}
}

Çıktı Açıklaması: ‘i’ değişkeni, döngünün her yinelemesinde kapsam dışına çıktığı için, aslında her yinelemeyi yeniden beyan ederek aynı endeksin (yani i) birden fazla değişkeni temsil etmek için kullanılmasına izin verir.

Java’da son ders

Bir sınıfı bildirmek için Final anahtar sözcüğü kullanıldığında buna final sınıfı denir. Final sınıfı başka bir sınıf tarafından genişletilemez veya miras alınamaz.

Bir sınıfı Final olarak bildirmenin temel amacı kalıtımı önlemektir. Sınıfı final olarak işaretleyerek daha fazla uzatılamayacağını garanti altına alıyoruz. Java’daki son sınıfların tipik bir örneği, Integer, Float, vb. gibi bir dizi sarmalayıcı sınıftır. Bu sarmalayıcı sınıflar final olarak bildirilir, yani alt sınıflara ayrılamazlar veya genişletilemezler.

Bir sınıfı sonlandırma kararı genellikle sınıfın belirli bir davranışa sahip olması ve genişletilmemesi veya değiştirilmemesinin amaçlandığı tasarım hususlarına dayanır. Bu, bir düzeyde kontrol sağlar ve sınıfın işlevselliğinin bozulmadan ve tutarlı kalmasını sağlar.

Kısacası, bir sınıf final olarak işaretlendiğinde genişletilemez veya miras alınamaz. Son sınıfların bu kullanımı özellikle aşırı genişlemeyi önlemek ve sınıf davranışının bütünlüğünü korumak istediğimiz senaryolarda faydalıdır.

final class A
{
// methods and fields
}
// The following class is illegal
class B extends A
{
// COMPILE-ERROR! Can't subclass A
}

Final’in sınıflarla başka bir kullanımı, önceden tanımlanmış String sınıfı gibi değişmez bir sınıf oluşturmaktır. Bir sınıfı sonlandırmadan değişmez hale getiremezsiniz.

Java’da son yöntemler

Bir yöntemi Final olarak bildirmenin amacı, türetilmiş tüm sınıflarda tutarlı bir uygulamayı zorlamaktır. Bir yöntem bir üst sınıfta final olarak işaretlendiğinde, herhangi bir alt sınıf tarafından geçersiz kılınamaz. Bu, yöntemin davranışının tüm alt sınıflarda aynı kalmasını sağlayarak tutarsızlıklara veya istenmeyen sonuçlara yol açabilecek değişiklikleri önler.

Final yöntemlerinin bir örneğini Java’daki Object sınıfında bulabilirsiniz. Object sınıfındaki finalize(), getClass() ve wait() gibi çeşitli yöntemler Final olarak bildirilir. Bu, alt sınıflarda bu yöntemlerin daha fazla değiştirilmesini önler ve tüm nesnelerde tutarlı davranış sağlar.

Kısacası, bir yöntem Final olarak bildirildiğinde hiçbir alt sınıfta geçersiz kılınamaz. Bu, belirli bir uygulamanın miras hiyerarşisi boyunca çalıştığı durumlarda faydalıdır. Java’da Final anahtar kelimesini bir yöntemle kullanarak tutarlılığı sağlayabilir ve alt sınıflarda istenmeyen değişiklikleri önleyebiliriz.

class A
{
 final void m1()
 {
 System.out.println("This is a final method.");
 }
}

class B extends A
{
 void m1()
 {
// Compile-error! We can not override
 System.out.println("Illegal!");
 }
}

Java’da Final’in Avantajları

Java’daki Final anahtar sözcüğünün birkaç önemli avantajı vardır:

  • Değişmezlik Güvencesi : Bir değişken veya referans Final olarak işaretlendiğinde değeri atama sonrasında değiştirilemez. Bu, değişmezliği güçlendirir ve kritik verilerin sabit kalmasını ve kazara veya kasıtlı olarak değiştirilememesini sağlar. Değişmezlik özellikle değişmeden kalması gereken sabitler veya hassas veriler için değerlidir.
  • Performans iyileştirmesi : Final’in kullanılması, Java Sanal Makinesi’nin (JVM) değişkenlerin veya referansların değişmezliği hakkında belirli varsayımlarda bulunmasına izin vererek performans optimizasyonuna yol açabilir. Bu bilgiyle JVM, kodu daha güvenilir bir şekilde optimize edebilir ve bu da potansiyel performans kazanımlarına yol açabilir.
  • Kod Anlayışını Artırma : Geliştiriciler, Java’da değişkenleri, yöntemleri veya sınıfları final olarak bildirerek kodlarının anlaşılmasını ve üzerinde akıl yürütmeyi kolaylaştırır. Değer veya referans final olarak işaretlendiğinde değişmeyeceği açıktır ve bu, kod analizini, hata ayıklamayı ve genel anlayışı kolaylaştırır.
  • Kodun yeniden kullanımını teşvik etme : Yöntemlerin final olarak işaretlenmesi, alt sınıfların geçersiz kılınmasını önler. Bu, kodun yeniden kullanımını teşvik eder ve çoğaltmayı azaltır. Bu, daha sürdürülebilir ve organize kod tabanlarına yol açabilir.
  • Güvenliği Artırma: Java’da Final’i kullanmak, hassas verileri veya önemli davranışları kötü amaçlı kodlardan koruyarak güvenliği artırabilir. Nihai değişkenler ve yöntemler, programın belirli yönlerinin değişmez kalmasını sağlar ve potansiyel tehditlere karşı ekstra bir koruma katmanı ekler.

son söz

Java’daki Final anahtar sözcüğü, kod kalitesini artırmak ve program bütünlüğünü korumak için değerli ve çok yönlü bir araçtır. Değişmezliği sağlama, performansı artırma, kodun anlaşılmasını kolaylaştırma, kodun yeniden kullanımını teşvik etme ve güvenliği geliştirme yeteneği, onu güvenli, sağlam ve bakımı kolay Java kodu yazmanın önemli bir yönü haline getirir. Geliştiriciler, Final’i değişkenlere, yöntemlere ve sınıflara stratejik olarak uygulayarak daha güvenilir ve verimli yazılım sistemleri oluşturabilirler.