CodeBlanks Logo Icon CodeBlanks

Kapsam

Metot içi değişken kapsamını öğrenirsin.

Kapsam: değişken nerede yaşar?

Bir değişken, tanımlandığı blok içinde geçerlidir. Buna kapsam (scope) denir. Blok kapandığında değişken yok olur.

static void f() {
  int x = 5;
  System.out.println(x); // x burada geçerli
}
// x burada geçerli DEĞİL

Metot parametreleri de o metoda özeldir; başka metottan erişilemez. İç içe bloklarda dış bloğun değişkenleri iç blokta görülür, fakat tersi geçerli değildir.

İsim çakışması ve gölgeleme

İç blokta, dış blokla aynı isimde değişken tanımlamak yasaktır; derleme hatası alırsın. Fakat metot parametresiyle aynı isimde bir sınıf değişkeni varsa, parametre gölgeleme (shadowing) yapar.

static int x = 10; // sınıf değişkeni
static void f(int x) {
  System.out.println(x); // parametre x
}

Karışıklığı önlemek için isimleri farklı tutmak iyi bir uygulamadır. Sınıf değişkenine erişmek için this.x kullanılır (ileride göreceksin).

Uygulama Yerel ve sınıf değişkeni

Sınıf düzeyinde static int counter = 0; tanımla. increment metodu her çağrıldığında counter'ı 1 artırıp yeni değeri yazdırsın. main içinden increment'i üç kez çağır.

Başlangıç kodu

Main.java
public class Main {
  // Sayaç için sınıf düzeyinde bir değişken tanımla (başlangıç 0)
  public static void main(String[] args) {
    // increment metodunu üç kez çağır
  }
  // static void increment metodunu tanımla
}

Örnek çözüm

Main.java
static int counter = 0;
static void increment() {
  counter++;
  System.out.println(counter);
}
// main içinde:
increment();
increment();
increment();

Beklenen çıktı

1
2
3

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bildirim yeri ve kapsamı eşleştir

Kavram Anlamı
Metot içinde Metot boyunca geçerli
Metot parametresi Sadece metot gövdesinde
for döngüsü içinde Döngü bloğunda
Sınıfın en üstü Tüm metotlarda

2 Bir metot içinde tanımlanan değişkene başka metottan erişilebilir mi?

  • Hayır, değişken o metoda özeldir
  • Sadece public olarak tanımlanırsa
  • Evet, ama sadece static metotlardan
  • Evet, sınıf geneline yayılır Doğru cevap

Açıklama: Yerel değişkenler sadece kendi metotlarında yaşar.

3 Boşluğu doldur: blok kapsamı

Soru
static void f() {
  for (int i = 0; i < 3; i++) {
    int t = i * 2;
  }
  // t burada ____ geçerli DEĞİL
}
Cevap
static void f() {
  for (int i = 0; i < 3; i++) {
    int t = i * 2;
  }
  // t burada geçerli geçerli DEĞİL
}

Açıklama: t döngü bloğunun dışında geçerli değildir.

Başlangıç bölümündeki tüm dersler