1. Statik değişkenler
Bir sınıf belleğe yüklendiğinde hemen statik bir nesne oluşturulur. Bu nesne, statik sınıf değişkenlerini (statik sınıf alanları) depolar. Statik nesne, sınıfın hiçbir sıradan (statik olmayan) nesnesi yaratılmamış olsa bile mevcuttur.
Bir sınıfta değişkenler bildirdiğimizde, bunların yalnızca bir kez mi yaratılacağını yoksa her nesnede bu değişkenlerin farklı örneklerinin mi olması gerektiğini belirtiriz. Varsayılan olarak, her nesne için her değişkenin yeni bir kopyası oluşturulur.
Statik bir değişken, sınıfın statik nesnesine bağlıdır ve her zaman onun tek bir örneği vardır.
static
Bir sınıfta statik bir değişken oluşturmak için, anahtar kelimeyi adından önce yazmanız gerekir . Statik bir değişken bildirmek için genel biçim şöyledir:
static Type name = value;
Bir statik değişkene bir başlangıç değeri atanmamışsa, varsayılan bir değerle başlatılır:
Tip | Varsayılan değer |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
(aynı şey
) |
|
|
ve herhangi bir sınıf |
|
Örnekler:
kod | Not |
---|---|
|
|
|
|
|
|
|
|
|
Bir sınıfın içinde, statik değişkenlerine yalnızca adlarını kullanarak başvurabilirsiniz. Ancak bunlara başka bir sınıftan erişmek için statik değişkenin adından önce sınıfın adını yazmanız gerekir.
ClassName.variable
Örnek:
Değişken | Sınıf | Sınıfının dışında bir değişkene erişme |
---|---|---|
|
|
|
|
|
|
|
|
değişken private . Sınıfın dışında görünmez. |
|
|
değişken private . Sınıfın dışında görünmez. |
|
|
değişken private . Sınıfın dışında görünmez. |
2. Statik ve statik olmayan değişkenler arasındaki fark
Bir sınıfın statik olmayan (sıradan) değişkenleri, statik olanlarla aynı şekilde, yalnızca anahtar static
kelime olmadan bildirilir.
Sıradan değişkenler ile statik değişkenler arasındaki fark nedir?
Bir sınıfın sıradan değişkenleri, sınıfın nesnelerine (sınıfın örnekleri) bağlıdır, statik değişkenler ise sınıfın statik nesnesine bağlıdır.
Bir sınıfın birden çok örneği varsa, bunların her birinin statik olmayan (sıradan) değişkenlerin kendi kopyası vardır. Bir sınıfın statik değişkenleri her zaman statik nesnesinde saklanır ve bunların yalnızca tek bir örneği vardır.
Bir sınıfın sıradan değişkenlerine (alanlarına), yalnızca sınıfın bir nesnesine referansınız varsa erişebilirsiniz. Ve tabii ki sınıfın iç yöntemleri.
Örnek:
Bir nesne referansı kullanarak bir sınıfın alanına erişme |
---|
|
Statik değişkenlere her yerden erişebilirsiniz (görünürlük değiştiricileri hesaba kattıktan sonra): sıradan yöntemlerden, aynı sınıfın statik yöntemlerinden, diğer sınıfların yöntemlerinden vb.
Örnek:
Bir nesne referansı kullanmadan bir sınıfın statik alanına erişme |
---|
|
Bellek nasıl düzenlenir:
Diyelim ki Person
4 alanlı bir sınıfımız var: ikisi statik, ikisi değil.
public class Person
{
public static int count = 0;
public static int sum = 0;
public int age = 0;
public String name;
}
Sınıfı yükledikten hemen sonra
Java makinesi sınıfı yüklemeyi bitirdiğinde Person
, bellek şöyle görünecektir:
İlk nesneyi oluşturduktan sonra
Bir nesne yaratırsak Person
, resim şu hale gelir:
Lütfen her iki nesnenin de iki değişkeni olmasına rağmen, bunların farklı değişkenler olduğuna dikkat edin: sıradan nesnelerin sıradan değişkenleri vardır ve statik nesnenin statik değişkenleri vardır.
Daha fazla nesneye ihtiyacımız var
İki nesne daha oluşturalım Person
. Şimdi bellek şöyle görünecek:
Lütfen her nesnenin kendi yaş ve isim değişkenlerine sahip olduğunu unutmayın.
static
3. Değiştiriciyi kaldırma ve ekleme
Statikten sıradana
Statik bir değişken alıp değiştiricisini kaldırarak sıradan bir değişkene dönüştürürsek ne olur static
? Örneğin, static int sum
değişken.
Değiştirilen kod şöyle görünecektir:
public class Person
{
public static int count = 0;
public int sum = 0;
public int age = 0;
public String name;
}
Şimdi bellek şöyle görünür:
Statik değişken, statik nesneden kayboldu ve artık her sıradan nesnenin kendi sum
değişkeni var.
Sıradandan durağanlığa
Bunun tersini yapabiliriz: değiştiriciyi static
bir sınıfın sıradan değişkenlerine ekleyebiliriz. Tüm sıradan nesnelerden kaybolacaklar ve statik nesnede görünecekler. Diyelim ki ve değişkenlerini statik yapmaya karar verdik . age
name
Ardından kod şöyle görünecektir:
public class Person
{
public static int count = 0;
public int sum = 0;
public static int age = 0;
public static String name;
}
Ve şimdi hafıza şöyle görünecek:

GO TO FULL VERSION