CodeGym /Java Blogu /Rastgele /Java Kapsamı
John Squirrels
Seviye
San Francisco

Java Kapsamı

grupta yayınlandı
Hepimiz biliyoruz ki ülkelerin sınırları ve kendi kanunları vardır. Ülkenin yasaları sınırlar içinde işler. Ayrıca ülkede örneğin okullar veya müzeler gibi kendi yerel kuralları olan kuruluşlar vardır. Ülke yasalarına aykırı değiller, sadece belirtilen organizasyon çerçevesinde faaliyet gösteriyorlar. Aynı şey programlamada da geçerlidir. Dolayısıyla programlamada ve özellikle Java dilinde bir "kapsam" terimi vardır. Değişkenler veya yöntemler gibi belirli verilerin çalıştığı program alanlarını ifade eder. Bu yazıda, Java'daki değişkenler için hangi kapsamların olduğunu ve bunların nasıl tanımlanacağını anlayacağız.

Genel olarak Java Kapsamı

Değişkenlerin ve yöntemlerin kapsamlarını ayırmak neden gereklidir? Gerçek şu ki, bazen programlar çok büyüktür ve belirli bir değişkeni izlemek zor olabilir. Ek olarak, büyük projelerde, ne için olduklarının net olması için değişkenlerin açık bir şekilde adlandırılması arzu edilir. Kapsam, özellikle programın farklı bölümlerinde aynı ada sahip farklı değişkenlere sahip olmanızı sağlar. Bu tür kodların bakımı ve okunması daha kolaydır. Java kapsamı, belirli bir değişken veya yöntemin bir programda nerede erişilebilir olduğunu tanımlar. Kısaca:
  • Bir yöntemde bildirilen bir değişken, bildirimin başından yöntemin sonuna kadar görünür (yöntem kapsamı).
  • Bir kod bloğunda bildirilen bir değişken, o kod bloğunun sonuna kadar mevcuttur.
  • Yöntem argümanları olan değişkenler, yöntemin sonuna kadar mevcuttur.
  • Sınıf/nesne değişkenleri, kapsayıcı nesnenin ömrü boyunca mevcuttur. Görünürlükleri, özel erişim değiştiricileri tarafından düzenlenir.
  • Statik sınıf değişkenleri, programın çalıştığı her zaman mevcuttur. Görünürlükleri ayrıca erişim değiştiricileri tarafından belirlenir.

Yöntem Seviyesi Kapsamı

Argümanlar da dahil olmak üzere, bir yöntemde bildirilen herhangi bir değişkene, bu yöntemin dışından erişilemez. Yöntemler içinde bildirilen tüm değişkenler, bildirimlerinin başlangıcından yöntemin sonuna kadar görünür. Yöntem değişken kapsamına bir örnek:

public class JScopeTest1 {


   public static void main(String[] args) {

       System.out.println(myMethod(5));
       System.out.println(myMethod(17));

   }
   public static int  myMethod(int arg) {
       int secondArg = 100; //local method variable
       return secondArg + arg;
   }
}
Burada, yerel bir değişken veya yöntem bağımsız değişkeni olan secondArg'a sahibiz . Bu değişkeni myMethod yönteminin dışında veya bildirilmeden önce kullanamayız . Bir değişken bir işlev bağımsız değişkeniyse, bu yöntemin tüm gövdesinde görünür. Yukarıdaki örnekte böyle iki argümanımız var: myMethod'da arg ve ana metotta args.

Sınıf Seviyesi Kapsamı

Sınıf Düzeyinde Kapsam (Örnek Değişkenler) — bir sınıfta bildirilen herhangi bir değişken, o sınıfın tüm yöntemleri için kullanılabilir. Erişim değiştiricisine bağlı olarak (ör. genel veya özel), bazen sınıfın dışından erişilebilir. Dolayısıyla, bir değişken bir sınıf değişkeniyse, o zaman belirli bir nesneye bağlıdır ve bu sınıfın bir nesnesi olduğu sürece var olur. Nesne yoksa, değişkenin kopyası da yoktur. Değişken, kendisinden önce veya sonra bildirilip bildirilmediğine bakılmaksızın, sınıfın tüm yöntemlerinden görülebilir. Her nesnenin diğer nesnelerden bağımsız olarak kendi değişkeni vardır. Statik yöntemlerden bir değişkene erişim mümkün değildir.

Kod örneği


public class Student {
   
//class level variables
   public String surname;
   String name;
   String secondName;
   private Long birthday; // Long instead of long is used by Gson/Jackson json parsers and various orm databases

   public Student(String surname, String name, String secondName, Date birthday ){
       this.surname = surname;
       this.name = name;
       this.secondName = secondName;
       this.birthday = birthday == null ? 0 : birthday.getTime();
   }

   @Override
   public int hashCode(){
       //TODO: check for nulls
       //return surname.hashCode() ^ name.hashCode() ^ secondName.hashCode() ^ (birthday.hashCode());
       return (surname + name + secondName + birthday).hashCode();
   }
   @Override
   public boolean equals(Object other_) {
       Student other = (Student)other_;
       return (surname == null || surname.equals(other.surname) )
               && (name == null || name.equals(other.name))
               && (secondName == null || secondName.equals(other.secondName))
               && (birthday == null || birthday.equals(other.birthday));
   }
}
Soyad , ad , ikinci Ad ve doğum günü Örnek değişkenleridir.

Blok Kapsamı

Bir değişken bir kod bloğunda tanımlanmış/bildirilmişse, o kod bloğunun sonuna kadar var olur. Tipik olarak, bu tür değişkenler, tanımlandıkları kaşlı ayraçlar arasında bulunur. Çoğu zaman blok kapsamı bir döngü değişkeni olabilir. For döngüsü koşulunda bildirilen bir değişkene, önceden tanımlamadığınız sürece döngü dışından erişilemez.

public class JScopeTest2 {
   public static void main(String[] args) {
       for (int i = 0; i < 10; i++) {
           int sum = 0;
           sum = sum + i;
       }
      
       int sum = 1;
       System.out.println(sum);
   }
}
Hem first sum hem de i değişkenleri döngü içinde bildirilir ve bu döngü dışında mevcut değildir. Ancak ikinci toplam, döngünün dışında bildirildi, bu nedenle bu özel değişken yazdırılacak.

statik değişkenler

Bir değişken statik olarak bildirilirse (statik anahtar sözcükle işaretlenir), sınıfı var olduğu sürece var olur. Tipik olarak, statik değişkenler başlatıldığında, JVM ilk kullanımda belleğe bir sınıf yükler.

import java.util.Date;

public class Student {
   public static int today = 2022;
   String surname;
   String name;
   String secondName;
   Long birthday; // Long instead of long is used by Gson/Jackson json parsers and various orm databases

   public Student(String surname, String name, String secondName, Date birthday ){
       this.surname = surname;
       this.name = name;
       this.secondName = secondName;
       this.birthday = birthday == null ? 0 : birthday.getTime();
   }

 
   public static void main(String[] args) {
       System.out.println(today);
   }

}
Statik bugün değişkenini kullanmak için yeni bir Student sınıfı örneği oluşturmamalısınız . Buraya “2022” yazdırılacak.

Erişim değiştiricileri

Java, yönteme veya değişkene erişimi kısıtlamak için 4 erişim değiştiriciye sahiptir. Bunları metotların içinde değil, sınıfların içinde kullanabilirsiniz.
  • private en kısıtlayıcı değiştiricidir. Yöntemlere ve değişkenlere erişimi, bildirildikleri sınıfla sınırlar. Sınıf dışında belirli yöntemleri veya değişkenleri kullanmaya gerek yoksa private kullanın. Sınıf değişkenleri genellikle Java'da özeldir.

  • Erişim değiştiricisi belirtilmezse, yöntem veya değişken varsayılan değiştiriciyi kabul eder. varsayılan, yalnızca mevcut paketten erişime izin verir.

  • korumalı değiştirici, bir yönteme veya değişkene, paketin dışındaki bir alt sınıf aracılığıyla erişilmediği sürece, yalnızca geçerli paket içinden erişime izin verir.

  • public en az kısıtlayıcı değiştiricidir. Bir sınıfa, metoda veya değişkene sadece ilan edildiği sınıftan değil, dışarıdan da erişmenizi sağlar. Bu değiştirici gerçekten sık kullanılır.

Yorumlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION