1. Sabitler

Diğer birçok programlama dilinde sabitler , yani değerleri değiştirilemeyen değişkenler bulunur . PiGenellikle, yılın aylarındaki günlerin sayısı veya sayısı gibi bazı temel şeyler için kullanılırlar . Bununla birlikte, ilke olarak, bir programcı gerekli olduğuna karar verirse herhangi bir değişkeni sabit yapabilir.

Peki Java'da değişmez bir değişkeni (sabit) nasıl ilan edersiniz? Bunun için özel bir anahtar kelime var: final. Değişmez bir değişken oluşturmak, sıradan bir değişken oluşturmakla aynı görünür. Tek fark, değişkenin türünden önce kelimeyi finalşu şekilde yazmanız gerektiğidir:

final Type name = value;

Bir değişkene farklı bir değer atamaya çalışırsanız final, programınız derlenmez.

Bir finaldeğişken, bildirildiğinde başlatılmalıdır (ona bir değer atanmalıdır). Bu kuralın bir istisnası vardır: statik bir sınıf değişkeninin başlatmasını bir yapıcıya taşıyabilirsiniz. Ancak bunu Seviye 10'da öğreneceksiniz .

Anahtar sözcük sayısını azaltmak için, Java geliştiricileri sözcüğü finalyalnızca sabitleri bildirmekten daha fazlası için kullanırlar. finalyöntemlere ve hatta sınıflara da uygulanabilir. olarak bildirilen yöntemler finalgeçersiz kılınamaz ve olarak bildirilen bir sınıf finalmiras alınamaz.

Değiştirici finalherhangi bir değişkenden önce eklenebilir: yerel değişkenler, yöntem parametreleri, sınıf alanları ve statik sınıf değişkenleri.

finalBir değişken adından önce, yalnızca o değişkende yapılacak herhangi bir değişikliğe karşı koruma olduğunu unutmayın . Bir değişken, bir nesneye referans saklıyorsa, nesne yine de değiştirilebilir.

Örnek:

final int[] data = {1, 2, 3, 4, 5, 6};

data = {6, 7, 8, 9};

data[0] = 0;
data[1] = 0;
data[2] = 0;
Bir dizi oluşturuyoruz.

Buna izin verilmez: değişken dataolarak bildirilir final.

Ama bunu yapabilirsin.
Ve ayrıca bu.

genel sabitler

Programınızda genel sabitler bildirmeye karar verirseniz, statik sınıf değişkenleri oluşturmanız ve bunları publicve yapmanız gerekir final. Bu tür değişkenlerin adları için özel bir stil vardır: tümü büyük harflerle yazılır ve sözcükleri ayırmak için alt çizgi kullanılır.

Örnekler:

class Solution
{
   public static final String SOURCE_ROOT = "c:\\projects\\my\\";
   public static final int DISPLAY_WIDTH = 1024;
   public static final int DISPLAY_HEIGHT = 768;
}


2. Değişken gölgeleme

Daha önce de söylediğimiz gibi, aynı metotta aynı ada sahip birden fazla yerel değişken oluşturamazsınız. Farklı yöntemlerle yapabilirsiniz.

Ancak muhtemelen bilmediğiniz şey şudur: örnek değişkenler ve yerel yöntem değişkenleri aynı ada sahip olabilir.

Örnek:

kod Değişken görünürlük
public class Solution
{
   public int count = 0;
   public int sum = 0;

   public void add(int data)
   {
     sum = sum + data;
     int sum = data * 2;
     count++;
   }
}


count
count, sum
count, sum
count, sum
count, sum, data
count, sum, data
count, sum, data
count, sum, data
count, sum

Yöntemde add, adında yerel bir değişken bildirdik sum. Metodun sonuna kadar, örnek değişkeni gölgeler (veya maskeler ) sum.

Tamam, diyorsunuz ki, bu bir anlamda beklenebilir. Ama bu hikayenin sonu değil. Bir örnek değişkeni yerel bir değişken tarafından gölgeleniyorsa, yine de yöntem içindeki örnek değişkenine atıfta bulunmanın bir yolu olduğu ortaya çıktı. thisBunu, anahtar kelimeyi adından önce yazarak yaparız :

this.name

Ad çakışmasının başarıyla çözüldüğü bir örneği burada bulabilirsiniz:

kod Değişken görünürlük
public class Solution
{
   public int count = 0;
   public int sum = 0;

   public void add(int data)
   {
     int sum = data * 2;
     this.sum = this.sum + data;
     count++;
   }
}


this.count
this.count, this.sum
this.count, this.sum
this.count, this.sum
this.count, this.sum, data
this.count, this.sum, data, sum
this.count, this.sum, data, sum
this.count, this.sum, data, sum
this.count, this.sum

count ve değişkenleri , anahtar kelime sum olsun ya da olmasın her yerde kullanılabilir this. sum Yerel değişkenin örnek değişkeni gölgelediği satırlarda sum, sum örnek değişkene yalnızca anahtar kelime kullanılarak erişilebilir this.

Örnek değişken yerine statik bir sınıf değişkeni gölgelenmişse, anahtar kelime yerine sınıf adına erişmeniz gerekir this:

ClassName.name

Örnek:

kod Değişken görünürlük
public class Solution
{
   public static int count = 0;
   public static int sum = 0;

   public void add(int data)
   {
     int sum = data * 2;
     Solution.sum = Solution.sum + data;
     count++;
   }
}

Solution.count, Solution.sum
Solution.count, Solution.sum
Solution.count, Solution.sum
Solution.count, Solution.sum
Solution.count, Solution.sum
Solution.count, Solution.sum, data
Solution.count, Solution.sum, data, sum
Solution.count, Solution.sum, data, sum
Solution.count, Solution.sum, data, sum
Solution.count, Solution.sum

Sınıf adını önek olarak  kullanarak veya kullanmadan, count ve static değişkenlerine her yerden erişebilirsiniz . Yerel değişkenin örnek değişkeni gölgelediği satırlarda , örnek değişkene erişim yalnızca önek olarak  kullanıldığında mümkündür .sumSolutionsumsumsumSolution



3. forDöngü içindeki değişkenler

Ve bir küçük ama ilginç gerçek daha.

Bir değişkenin özel bir şekilde bildirildiği bir yer de vardır — bir fordöngü içinde .

Bir döngünün tipik olarak parantez içinde bir sayaç değişkeni olduğunu hatırlayabilirsiniz for. Ve bu değişkenin görünürlüğü ne olacak? Sonuçta, döngünün gövdesinde değil. Tüm yöntem bu mu? Ya da değil?

Doğru cevap şudur : Bir fordöngünün başlığında bildirilen bir değişken, yalnızca döngünün gövdesinde ve döngününfor başlığında görünür .

Örnek:

kod Değişken görünürlük
public static void main(String[] args)
{
   int a = 0;

   for (int i = 0; i < 10; i++)
   {
     System.out.println(i);
   }

   System.out.println("end");
}


a
a
a, i
a, i
a, i
a
a
a

Böylece, kodunuzda her zaman birbiri ardına döngüler yazabilir ve aynı ada sahip sayaç değişkenlerini kullanabilirsiniz - bu herhangi bir sorun yaratmaz.

Örnek:

kod Değişken görünürlük
public static void main(String[] args)
{
   int a = 0;

   for (int i = 0; i < 10; i++)
   {
     System.out.println(i);
   }

   for (int i = 0; i < 10; i++)
   {
     System.out.println(i);
   }

   System.out.println("end");
}


a
a
a, i
a, i
a, i
a
a
a, i
a, i
a, i
a
a
a