Yükleniyor...

Java'da kapsam

Bir parametreli mark metodu yazın: static void mark(int n). Süslü parantezlerin içinde bu parametreyi System.out.println(n); ile yazdırın. main içinden mark(4); çağırın. Ekran bir satır göstermelidir: 4. n adı yalnızca mark içinde vardır. main'den n yazdırmaya kalkarsanız javac reddeder. Bir metodun hangi adları görebileceği sınırı — bu sayfanın öğrettiği budur.

Bir metot içinde kalan adlar

Aşırı yükleme sayfasında birkaç paint metodu bir adı paylaşmış ama ayrı parametre listeleri tutmuştu. Burada odak daha küçük: bir metot, bir parametre adı ve bu adın nerede görünebileceği. Parametre, onu bildiren metoda ait bir addır. O metodun süslü parantezlerinin dışında ad yoktur.
Gate.java adlı küçük bir program dosyası oluşturun. İlk satırdaki public class dosya adıyla uyuşmalıdır: public class Gate. Bu dosyada eski bir Sign veya Box sınıf adı bırakmayın; derleyici sınıf adı ile dosya adının uyuşmasını bekler.
main dışında, hâlâ sınıf süslü parantezlerinin içinde, static void mark(int n) yazın. Gövdenin bir yazdırması vardır: System.out.println(n);. Bu sayfada void kalsın. Dönüş değerlerine değil görünürlüğe bakıyorsunuz. Derlemeden önce dosyayı kaydedin. İlk tam program sonraki kutudadır.

mark ile Gate.java

Bu, önce derlediğiniz sürümdür. main çağrıyı tutar. mark, n kullanan yazdırmayı tutar.

mark prints its parameter

java
public class Gate {
    public static void main(String[] args) {
        mark(4);
    }

    static void mark(int n) {
        System.out.println(n);
    }
}

Gate.java'nın bulunduğu klasörden javac Gate.java çalıştırın. Parantezler, süslü parantezler ve noktalı virgüller uyuşunca javac kendi satırını yazmaz. Sonra java Gate çalıştırın — java Gate.java değil. İkinci komuttan .java sonunu çıkarın. Aynı iki komut Windows ve macOS'ta çalışır. Program bir satır yazdırıp durmalıdır: 4. Sizden yazmanızı istememelidir. Terminal klavye girişi bekliyorsa, eski bir alıştırmadan kalan nextLine çağrısı hâlâ dosyadadır. Onu silin ve yukarıdaki mark(4); ile mark metodunu tutun.
Çalışmayı bir kez sırayla izleyin. Java main'den başlar. mark(4) çağrısı 4'ü parametre n'ye gönderir. mark içinde println(n) 4 yazar. mark bitince n adı da biter. main hiç n adlı bir ad tutmamıştır. Sayı 4 çağrıdan değer olarak geçti. n adı main'e taşınmadı.
Çağrıdan sonra main içine System.out.println(n); eklerseniz javac n sembolünü bulamadığını bildirir. Bu hata dersin kendisidir: n hiç main'de bildirilmedi. Satırı main'den kaldırarak düzeltin veya orada yerel bir ada ihtiyacınız varsa başka bir ad bildirin. mark'ın parametresinin kendiliğinden main'de görünmesini beklemeyin.

Parametrenin yanında yerel bir ad

mark içinde parametre olmayan yeni bir ad da bildirebilirsiniz. Bu yerel ad yalnızca mark'ın süslü parantezleri arasında yaşar. Gövdeyi bir etiket saklayıp etiketi ve n'yi tek satırda yazdıracak şekilde değiştirin ya da demo için ikinci kısa bir metot tutun — bu sayfada sonraki kutu bunun yerine main'den ad geçirmeyi gösterir; bu başlangıç yolu alışılmıştır.
Yaygın bir başlangıç umudu, main'de bildirilen bir adın sınıftaki her metotta otomatik görünür olmasıdır. Bu şekilde değildir. main'de int room = 4; varken mark onu almadan room yazdırmaya kalkarsa javac mark içinde room'u bulamaz. Çözüm değeri geçirmektir: mark hâlâ mark(int n) iken mark(room);.

main yerelisini mark'a geçirin

main içinde int room = 4; bildirin. mark(room); çağırın. mark içinde n yazdırmaya devam edin. Ekran yine 4 gösterir. main'deki yerel ad room'dur. mark'taki parametre adı n'dir. Farklı yerlerde farklı adlardır. Seyahat eden şey 4 değeridir.

pass room into mark

java
public class Gate {
    public static void main(String[] args) {
        int room = 4;
        mark(room);
    }

    static void mark(int n) {
        System.out.println(n);
    }
}

Yeniden derleyip çalıştırın: javac Gate.java, sonra java Gate. Hâlâ bir satır görürsünüz: 4. room'u 9 yapıp metot gövdesini bırakırsanız ekran 9 gösterir. Metot n'ye gelen değeri yazdırmaya devam eder. main içinde System.out.println(room); eklerseniz room'u da yazdırabilir — o ad oraya aittir. main hâlâ n yazdıramaz.
mark kendi yerelisini bildirirse — örneğin süslü parantezlerin içinde int tag = 1; — bu tag main için görünmezdir. main'de System.out.println(tag); denemek, main'den n yazdırmakla aynı nedenle başarısız olur. mark'ın süslü parantezleri, içinde bildirilen adlar için bir duvardır.

Duvar neyi korur

Ayrımı sade sözlerle okuyun. main'de bildirilen adlar, değerlerini bir çağrıya geçirmedikçe main'de kalır. mark'ta bildirilen adlar — parametreler ve yereller — mark'ta kalır. Çağrı değer taşır, adların kendisini değil. Önceki sayfadaki aşırı yükleme başka bir beceridir: ortak bir metot adıyla birkaç metot. Kapsam, bir değişken veya parametre adının kaynakta nerede görünebileceğiyle ilgilidir.
Birkaç paint metodu olan eski bir Sign demosu aynı dosyada kalırsa ve main hâlâ paint("ok") çağırırsa ekran karışabilir. main'i test ettiğiniz mark çağrısına indirin. mark'ı main'in süslü parantezlerinin içine gömmeyin. Metotlar sınıfın içinde, main'in yanındadır.
main içinde System.out.println("n"); yazmak tırnak içindeki n harfini yazdırır. Parametreyi yazdırmaz. Çağrıdan gelen değeri istediğinizde println(n)'yi mark içinde tutun. Başlık hâlâ mark(int n) derken boş parantezli mark(); başarısız olur — çağrı bir int göndermelidir; 4 gibi bir literaller veya room gibi bir yerel.

recursion'dan önce

mark(int n) yazabilir, bu metot içinde n yazdırabilir ve n'yi main dışında tutabilirsiniz. main'de room bildirebilir ve room'u mark'a geçirebilirsiniz. Ekran çağrıdan geçen değeri gösterir. Adlar süslü parantezlerden kendiliklerinden sızmaz. Sonraki sayfa recursion'dur; orada bir metot durma koşulu zinciri bitirene kadar kendini daha küçük bir argümanla çağırır.

🧠 Bilginizi Test Edin

Başlamaya Hazır

Bilginizi Test Edin

Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör

❓
6
Sorular
🎯
70%
Geçmek İçin
♾️
∞
Süre
🔄
∞
Deneme

📝 Talimatlar

  • Her soruyu dikkatle okuyun
  • Her soru için en iyi cevabı seçin
  • Quiz'i istediğiniz kadar tekrar alabilirsiniz
  • İlerlemeniz üstte gösterilecek