"Yeni bir konuya geçelim. Şimdi statik değişkenler ve yöntemlerden bahsetmek istiyorum."

"Ellie, statik değişkenleri ve yöntemleri zaten öğrendim. Ama daha fazla ayrıntı öğrenmek istiyorum."

"Bir sınıfta değişkenler bildirirken, bu değişkenlerin sadece bir kez mi yaratılacağını yoksa sınıfın her örneğinin (nesnesinin) kendi kopyasına mı sahip olacağını tanımlarız. Varsayılan olarak, her nesne için bir değişkenin yeni bir kopyası oluşturulur. . Şu şekilde görünüyor:"

Sınıf bildirimi
class Cat                        // Class
{
    String name;                 // Variable

    Cat(String name)             // Constructor
    {
        this.name = name;        // Variable initialization
    }
}
Ana yöntemdeki kod :
Cat cat1 = new Cat("Oscar"); // Create one object whose name variable contains "Oscar"
Cat cat2 = new Cat("Missy"); // Create one object whose name variable contains "Missy"
System.out.println(cat1.name);
System.out.println(cat2.name);
Ekran çıkışı
Oscar
Missy

"Aynı sınıfta bildirilmesine rağmen (Cat), değişkenler cat1.nameve cat2.namefarklı nesnelere başvurdukları için farklı değerler içerir."
"Bu mantıklı."
"Ancak, bir sınıfın her örneği için statik değişkenin yalnızca bir kopyası vardır ve ona sınıf adı kullanılarak erişilmelidir."

Sınıf bildirimi
class Cat                   // Сlass
{
    String name;            // Instance (non-static) variable
    static int catCount;    // Static variable

    Cat(String name)
    {
        this.name = name;
        Cat.catCount++;   // Increment the static variable by 1
    }
}
Ana yöntemdeki kod:
System.out.println(Cat.catCount);
Cat cat1 = new Cat("Oscar");

System.out.println(Cat.catCount);
Cat cat2 = new Cat("Missy");

System.out.println(cat1.name);
System.out.println(cat2.name);
System.out.println(Cat.catCount);
Ekran çıkışı:
0
1
Oscar
Missy
2

"Tamam, bu da mantıklı."

"Java yöntemleri iki kategoriye ayrılır. Örnek yöntemleri bir nesne üzerinde çağrılır ve o nesnenin verilerine erişime sahiptir. Statik yöntemlerin bu erişimi yoktur, çünkü bunların bir nesne referansı yoktur. sınıfın statik değişkenleri ve diğer statik yöntemler.

Statik yöntemler, statik olmayan yöntemleri veya statik olmayan değişkenleri ele alamaz!"

"Bu neden Ellie?"

"Her örnek değişkeni bir nesnenin içinde bulunur. Yalnızca o nesneye bir referansınız varsa erişilebilir. Statik bir yöntem için böyle bir referans mevcut değildir."

"Örnek yöntemlerin böyle bir referansı var mı?"

"Evet, örnek yöntemlere dolaylı olarak iletilir. Örnek yöntemin çağrıldığı nesneye yapılan bir başvuru, örnek yönteme dolaylı olarak iletilir. Bu başvuruyu depolayan değişkene this denir . Bu, yöntemin her zaman nesnenin data veya aynı nesne üzerinde başka bir statik olmayan yöntemi çağırın.

Bir nesne başvurusu yerine, statik yöntemlere null geçirilir. Bu nedenle statik olmayan değişkenleri ve yöntemleri ele alamazlar. Basitçe, bu değişkenler ve yöntemlerle ilişkili bir nesneye referansları yok."

"Tamam, Ellie, anlıyorum."

"Statik olmayan yöntemler şu şekilde çalışır:

Kod neye benziyor
Cat cat = new Cat();
String name = cat.getName();
cat.setAge(17);
cat.setChildren(cat1, cat2, cat3);
gerçekten ne oluyor
Cat cat = new Cat();
String name = Cat.getName(cat);
Cat.setAge(cat, 17);
Cat.setChildren(cat, cat1, cat2, cat3);
<nesne> nokta <yöntem adı> kullanarak bir yöntem çağırdığınızda, aslında bir sınıf yöntemi çağırıyorsunuz ve aynı nesneyi ilk bağımsız değişken olarak geçiriyorsunuz. Yöntemin içinde, nesne 'this' olarak adlandırılır . Yöntemdeki tüm işlemler bu nesne ve verileri üzerinde gerçekleştirilir."

"Statik yöntemler şu şekilde çalışır:

Kod neye benziyor
Cat cat1 = new Cat();
Cat cat2 = new Cat();
int catCount = Cat.getAllCatsCount();
gerçekten ne oluyor
Cat cat1 = new Cat();
Cat cat2 = new Cat();
int catCount = Cat.getAllCatsCount(null);
Statik bir yöntem çağırdığınızda, ona hiçbir nesne iletilmez. Başka bir deyişle, 'bu' eşittir null . Bu nedenle statik bir yöntem, statik olmayan değişkenlere ve yöntemlere erişemez (çünkü statik olmayan yöntemlere dolaylı olarak iletecek hiçbir şeyi yoktur).

"Bir değişken veya yöntem, önünde static anahtar kelimesi varsa statiktir."

"Bu kadar ciddi şekilde sınırlıysa, bu tür yöntemlere neden ihtiyaç duyuluyor?"

"Eh, bu tür yöntemlerin yararları var."

"Öncelikle, statik yöntemler ve değişkenler kullanmak için bir nesne referansı iletmek zorunda değiliz. "

"İkincisi, bazen bir değişkenin yalnızca bir kopyasına sahip olmak gerekir. Örneğin, System.out (System sınıfının statik çıkış değişkeni)."

"Üçüncüsü, bazen nesneleri yaratabilmeniz için önce bir yöntem çağırmanız gerekir."

"Ellie, bana bunun bir örneğini verebilir misin?"

" Main() yönteminin neden statik olduğunu düşünüyorsunuz ? Statik olduğundan, programcı bir sınıfı belleğe yükledikten hemen sonra, herhangi bir nesne oluşturulmadan önce onu çağırabilir."