Sınıfların içinde bulunan değişkenler her yeni nesne için tekrar tekrar oluşturulur . Buna nesne değişkeni denir . Fakat bazı durumlarda nesneler için değil de sınıf için genel değişkenler tanımlanması gerekir ki bu da static anahtar kelimesi ile mümkündür . Daha açık anlatmak gerekirse ;
Aşağıdaki gibi bir nesne sınıfınız varsa ve sürekli instance alarak yeni nesne üretiyorsanız ve her nesne için id numarasının bir artmasını istiyorsanız bunun için id değerini static yapmanız gerekiyor . Çünkü oluşturulan her nesne için ayrı bir id değişkeni oluşturmak yerine o sınıfa ait bir değişken oluşturulmuştur .
Static kullanılmasaydı her seferinde değer 0 dan başlayacak ve 1 olacaktı -yani sürekli başa saracaktı-. Ek olarak bu nesne değişkenine direk "Nesne.id" ile de ulaşabilirsiniz . Herhangi bir instance almaya gerek duymadan .
Static methodlarda aynı şekilde instance almadan direk sınıfı adı üzerinden ulaşılabilir kullanım açısından static değişkenle arasında bir fark bulunmaz -nesneden bağımsız method oluşturmak -. Tek dikkat edilmesi gereken static methodlar içinde de static değişkenler kullanılması gerekmektedir .
Farklı bir static anahtar kelimesi kullanımı ise "static kod bloklarıdır" . Genellikle oluşturulan static değişkenlere ilk değerlerini atamak için kullanılırlar ve bu static blokları nesne oluşturulmadan hemen önce çalışır .
Dipnot : public static void main() in static olmasının nedeni kodun JVM e ilk yüklenme anında ortada herhangi bir nesne olmaması ve nesne yaratmadan methodun kullanılmasının tek yolunun static olarak tanımlanmasıdır .
Aşağıdaki gibi bir nesne sınıfınız varsa ve sürekli instance alarak yeni nesne üretiyorsanız ve her nesne için id numarasının bir artmasını istiyorsanız bunun için id değerini static yapmanız gerekiyor . Çünkü oluşturulan her nesne için ayrı bir id değişkeni oluşturmak yerine o sınıfa ait bir değişken oluşturulmuştur .
public final class Nesne {
public static int id = 0;
public Nesne() {
id++;
}
}
public class Main {
public static void main(String[] args) {
Nesne nesne1 = new Nesne();
System.out.println(nesne1.id);
Nesne nesne2 = new Nesne();
System.out.println(nesne2.id);
}
}
Sonuç : 1
2
Static kullanılmasaydı her seferinde değer 0 dan başlayacak ve 1 olacaktı -yani sürekli başa saracaktı-. Ek olarak bu nesne değişkenine direk "Nesne.id" ile de ulaşabilirsiniz . Herhangi bir instance almaya gerek duymadan .
public class Main {
public static void main(String[] args) {
Nesne nesne1 = new Nesne();
System.out.println(nesne1.id);
Nesne nesne2 = new Nesne();
System.out.println(nesne2.id);
Nesne.id = 10;
System.out.println(nesne2.id);
}
}
Sonuç : 1
2
10
Static methodlarda aynı şekilde instance almadan direk sınıfı adı üzerinden ulaşılabilir kullanım açısından static değişkenle arasında bir fark bulunmaz -nesneden bağımsız method oluşturmak -. Tek dikkat edilmesi gereken static methodlar içinde de static değişkenler kullanılması gerekmektedir .
Farklı bir static anahtar kelimesi kullanımı ise "static kod bloklarıdır" . Genellikle oluşturulan static değişkenlere ilk değerlerini atamak için kullanılırlar ve bu static blokları nesne oluşturulmadan hemen önce çalışır .
public final class Nesne {
public static int id = 0;
public Nesne() {
System.out.println("constructor");
id++;
}
static
{
System.out.println("static blok");
id=10;
}
}
public class Main {
public static void main(String[] args) {
System.out.println("main");
Nesne nesne1 = new Nesne();
System.out.println(nesne1.id);
Nesne nesne2 = new Nesne();
System.out.println(nesne2.id);
Nesne.id = 10;
System.out.println(nesne2.id);
}
}
Sonuç : main
static blok
constructor
11
constructor
12
10
Kısacası bir sınıf için genel bir değişken oluşturulmak istendiğinde static anahtar kelimesi kullanılmalıdır . Son olarak bir statik sınıftan sadece static değer ve methodlara erişilebilir . Aksi halde instance alınması gerekmektedir .Dipnot : public static void main() in static olmasının nedeni kodun JVM e ilk yüklenme anında ortada herhangi bir nesne olmaması ve nesne yaratmadan methodun kullanılmasının tek yolunun static olarak tanımlanmasıdır .