Java'daki Statik Alanlar Nasıl Çalışır?

click fraud protection

Belirli bir sınıfın tüm örneklerinde paylaşılan değerlere sahip olmanın yararlı olduğu zamanlar olabilir. Statik alanlar ve statik sabitler bu tür paylaşımları, sınıf ve gerçek nesnelere değil.

Statik Değiştirici

Normalde bir sınıfta tanımlanan alanlar ve yöntemler yalnızca o sınıf türünde bir nesne oluşturulduğunda kullanılabilir. Örneğin, bir mağazadaki malları izleyen basit bir Item sınıfını düşünün:

 genel sınıf Öğesi {

 private String itemName;


 public Item (Dize itemName)

 {

 this.itemName = itemName;

 }


 public String getItemName ()

 {

 return itemName;

 }

 } 

GetItemName () yöntemini kullanabilmek için, önce bir Item nesnesi oluşturmalıyız, bu durumda catFood:

 genel sınıf StaticExample {


 public static void main (Dize [] args) {

 Item catFood = new Item ("Whiskas");

 System.out.println (catFood.getItemName ());

 }

 } 

Ancak, statik değiştirici bir alan veya yöntem bildirimine dahil edilirse, sınıfın hiçbir örneği alanı veya yöntemi kullanmak için gereklidir - bunlar bir bireyle değil sınıfla ilişkilidir nesne. Yukarıdaki örneğe tekrar bakarsanız, statik değiştiricinin ana yöntem beyanı:

instagram viewer
 halka açık statik void main (String [] args) { 

ana yöntem bir statik yöntem bir nesnenin çağrılmadan önce varlığını gerektirmez. Main () herhangi bir Java uygulaması için başlangıç ​​noktası olduğundan, aslında onu çağırmak için zaten hiçbir nesne yoktur. Sürekli kendini çağıran bir programa sahip olmak istiyorsanız, bunu yapabilirsiniz:

 genel sınıf StaticExample {


 public static void main (Dize [] args) {


 String [] s = {"rastgele", "dize"};

 StaticExample.main (s);

 }

 }


Çok yararlı değil, ancak bir StaticExample sınıfı örneği olmadan main () yönteminin nasıl çağrılabileceğine dikkat edin.

Statik Alan Nedir?

Statik alanlar, sınıf alanları olarak da bilinir. Bunlar, bildirimlerinde statik değiştiriciye sahip alanlardır. Örneğin, Item sınıfına geri dönelim ve statik bir alan ekleyelim:

 genel sınıf Öğesi {


 // statik alan uniqueId

 özel statik int uniqueId = 1;


 özel int itemId;

 private String itemName;


 public Item (Dize itemName)

 {

 this.itemName = itemName;

 itemId = uniqueId;

 Uniqueıd ++;

 }

 }


İtemId ve itemName alanları normal statik olmayan alanlardır. Bir Item sınıfının örneği oluşturulduğunda, bu alanların o nesnenin içinde tutulan değerleri olacaktır. Başka bir Item nesnesi oluşturulursa, değerlerin depolanması için itemId ve itemName alanlarına da sahip olur.

Ancak uniqueId statik alanı, tüm Item nesnelerinde aynı olacak bir değeri tutar. 100 Öğe nesnesi varsa, itemId ve itemName alanlarının 100 örneği olacaktır, ancak yalnızca bir uniqueId statik alanı olacaktır.

Yukarıdaki örnekte, her Item nesnesine benzersiz bir sayı vermek için uniqueId kullanılır. Oluşturulan her Item nesnesi uniqueId statik alanındaki geçerli değeri alır ve sonra bunu bir arttırırsa bunu yapmak kolaydır. Statik alan kullanımı, her nesnenin diğer nesneler hakkında bilgi sahibi olması gerekmediği anlamına gelir. benzersiz kimlik. Öğe nesnelerinin oluşturulduğu sırayı bilmek istiyorsanız bu yararlı olabilir.

Statik Sabit Nedir?

Statik sabitler, değerlerinin değiştirilememesi dışında tam olarak statik alanlara benzer. Tarla bildiriminde, nihai ve statik değiştiricilerin her ikisi de kullanılır. Örneğin, Item sınıfı belki itemName uzunluğunda bir kısıtlama getirmelidir. Statik sabit bir maxItemNameLength oluşturabiliriz:

 genel sınıf Öğesi {


 özel statik int id = 1;

 public static final int maxItemNameLength = 20;


 özel int itemId;

 private String itemName;


 public Item (Dize itemName) 

 {

 if (itemName.length ()> maxItemNameLength)

 {

 this.itemName = itemName.substring (0,20);

 }

 Başka

 {

 this.itemName = itemName;

 }

 itemId = id;

 id ++;

 } } 

Statik alanlarda olduğu gibi, statik sabitler tek bir nesne yerine sınıfla ilişkilendirilir:

 genel sınıf StaticExample {


 public static void main (Dize [] args) {


 Item catFood = new Item ("Whiskas");

 System.out.println (catFood.getItemName ());

 System.out.println (Item.maxItemNameLength);

 }

 }


MaxItemNameLength statik sabiti hakkında dikkat edilmesi gereken iki önemli nokta vardır:

  • Kamusal alan olarak ilan edilir. Genellikle, tasarladığınız herhangi bir sınıfta bir alanı herkese açık hale getirmek kötü bir fikirdir, ancak bu durumda önemli değildir. Sabitin değeri değiştirilemez.
  • Statik sabit, Item nesnesinden değil, Item adından kullanılır.

Statik sabitler Java API'sinde görülebilir. Örneğin, tamsayı sarıcı sınıfı int ve en büyük değerleri saklayan iki tane içerir. veri tipi sahip olabilmek:

 System.out.println ("int için maksimum değer:" + Tamsayı. MAKSİMUM DEĞER);

 System.out.println ("int için min değeri:" + Tamsayı. MIN_VALUE);


 Çıktı:

 İnt için maksimum değer: 2147483647

 İnt için min değeri: -2147483648


instagram story viewer