1. Statik yöntemler
Statik değişkenlere ek olarak, sınıfların statik yöntemleri de olabilir.
Normal yöntemler, bir sınıfın nesnelerine (örneklerine) bağlıdır ve sınıfın sıradan (statik olmayan) değişkenlerine (ayrıca statik değişkenlere ve yöntemlere ) atıfta bulunabilir. Statik yöntemler, sınıfın statik nesnesine bağlıdır ve yalnızca sınıfın statik değişkenlerine ve/veya diğer statik yöntemlerine erişebilir.
Bir sınıfta sıradan (statik olmayan) bir yöntemi çağırmak için, önce sınıfın bir nesnesini oluşturmanız ve ardından yöntemi nesne üzerinde çağırmanız gerekir. Sınıfta bir nesne yerine sıradan bir yöntem çağıramazsınız.
Örnek:
Bir sınıfta statik olmayan bir yöntemi çağıramazsınız! |
---|
|
Ancak statik bir yöntemi çağırmak için, sınıfın statik nesnesinin basitçe var olması yeterlidir (ve sınıf belleğe yüklendikten sonra her zaman var olur). Bu nedenle main() yöntemi statiktir. Sınıfın statik nesnesine bağlıdır, dolayısıyla onu çağırmak için herhangi bir nesne oluşturmanız gerekmez.
Bir yöntemi static olarak bildirmek için, yöntem başlığından önce static anahtar sözcüğünü yazmanız gerekir. Bu yapının genel görünümü aşağıdaki gibidir:
static Type name(parameters)
{
method code
}
Örnekler:
kod | Not |
---|---|
|
Java makinesi, main yöntemi şöyle bir komutla çağırır: Solution.main() ; Statik test() yöntem, statik yöntemde çağrılır main() . |
Başka bir sınıftan statik bir yöntem çağırmak için statik yöntemin adından önce sınıf adını belirtmeniz gerekir. Bu yapının genel görünümü aşağıdaki gibidir:
Type name = ClassName.methodName(arguments)
Örnekler:
kod | Statik yöntem |
---|---|
|
|
|
|
|
|
2. Statik ve sıradan (statik olmayan) yöntemler
Statik yöntemlerle sıradan yöntemler arasındaki fark nedir?
Sıradan bir yöntem, sıradan bir nesneye (bir sınıfın örneği) bağlıdır, statik bir yöntem ise değildir. Sıradan bir yöntem, örneğindeki değişkenlere erişebilir, ancak statik bir yöntem şunları yapamaz: İlişkili bir örneği yoktur.
İki yöntem türü arasındaki farklar aşağıdaki tabloda ifade edilmiştir:
Yetenek/özellik | Sıradan yöntem | Statik yöntem |
---|---|---|
Sınıfın bir örneğine bağlı | Evet | HAYIR |
Sınıfın sıradan yöntemlerini çağırabilir | Evet | HAYIR |
Sınıfın statik yöntemlerini çağırabilir | Evet | Evet |
Sınıfın sıradan değişkenlerine erişebilir | Evet | HAYIR |
Sınıfın statik değişkenlerine erişebilir | Evet | Evet |
Bir nesne üzerinde çağrılabilir | Evet | Evet |
Sınıfta çağrılabilir | HAYIR | Evet |
Bu kadar ciddi şekilde sınırlıysa, bu tür yöntemlere neden ihtiyaç var? Cevap, bu yaklaşımın da avantajları olduğudur.
İlk olarak, statik yöntemlere ve değişkenlere erişmek için herhangi bir nesne referansı iletmeniz gerekmez.
İkincisi, bazen bir değişkenin yalnızca tek bir örneği olması gerekir. Örneğin, System.out
( System sınıfının statik çıkış değişkeni ).
Ve üçüncüsü, bazen nesne yaratmanın bile mümkün olabilmesi için bir yöntemi çağırmanız gerekir. Örneğin, Java makinesi, sınıfın bir örneği oluşturulmadan önce programın yürütülmesini başlatmak için main() yöntemini çağırır.
Sınıfın bir örneğine bağlı
Sıradan bir yöntem çağrıldığında, yöntemin çağrıldığı nesne olan bir argüman ona dolaylı olarak iletilir. Bu parametre denir this
. Bu örtülü parametre (yöntemin çağrıldığı nesneye bir başvuru), sıradan yöntemleri statik olanlardan ayırır.
Statik yöntemlerde bu örtük parametre yoktur, bu nedenle statik yöntemler içinde anahtar kelimeyi kullanamazsınız this
ve statik bir yöntem içinde statik olmayan bir yöntemi çağıramazsınız. Bir sınıfın örneğine referans almak için hiçbir yer yoktur.
Sınıfın sıradan yöntemlerini çağırabilir
Sıradan bir yöntem her zaman örtük this
parametreye sahiptir, bu nedenle her zaman yöntemin çağrıldığı nesneye bir başvurunuz olur. Sıradan bir yöntemi başka bir sıradan yöntem içinde çağırdığınızda, this
bu çağrıyı yapmak için örtük parametre kullanılır. Örnek
kod | Nasıl çalışır |
---|---|
|
|
Bu nedenle, statik bir yöntemden sıradan bir yöntem çağıramazsınız. this
Statik bir yöntem içinde adlandırılmış hiçbir örtük değişken yoktur .
Ya da başka bir durum hayal edin: Programımızda henüz sınıfımızın tek bir nesnesi bile yaratılmadı. Sınıfımızın statik bir metodunu çağırabilir miyiz? Evet. Ve bu statik yöntem sıradan (statik olmayan) bir yöntemi çağırabilir mi?
Peki, onu hangi nesne üzerinde arayacağız? Ne de olsa, sınıfımızın tek bir örneği henüz yok!
Sınıfın statik yöntemlerini çağırabilir
Statik yöntemler, programın herhangi bir yerinden — herhangi bir yerden çağrılabilir. Bu, hem statik yöntemlerden hem de sıradan yöntemlerden çağrılabilecekleri anlamına gelir. Burada herhangi bir kısıtlama yoktur.
Sınıfın sıradan değişkenlerine erişebilir
Bir sınıfın sıradan değişkenlerine, sıradan bir yöntemden erişebilirsiniz, çünkü bu, örtük parametre aracılığıyla sınıfın bir örneğine kolayca bir başvuru elde edebilir this
.
Statik bir yöntem, sıradan değişkenlerin değerlerini almak için sınıfın hangi örneğini kullanması gerektiğini bilmez. Ve daha genel olarak, statik bir yöntemin çağrıldığı ancak programda henüz sınıfın tek bir örneğinin oluşturulmadığı bir duruma kolaylıkla sahip olabiliriz.
Sonuç olarak, statik yöntemler bir sınıfın sıradan değişkenlerine erişemez.
Statik bir yöntemin sıradan bir yöntemi çağırdığını varsayalım. Bu sıradan yöntem hangi nesne üzerinde çağrılmalıdır?

Kimse bilmiyor! Bu nedenle, bir nesneye referans vermeden, statik bir yöntemden sıradan bir yöntem çağıramazsınız !
Sınıfın statik değişkenlerine erişebilir
Statik değişkenlere yapılan çağrılardaki durum, statik yöntemlere yapılan çağrılarla aynıdır. Statik değişkenlere programın herhangi bir yerinden erişilebilir. Bu, onlara statik ve sıradan yöntemlerden erişebileceğiniz anlamına gelir.
Bir nesne üzerinde çağrılabilir
Bir nesne üzerinde hem statik hem de sıradan yöntemler çağrılabilir. Sıradan bir yöntem çağrısı mümkündür - aslında sıradan bir yöntemi çağırmanın tek yolu budur. Bir nesne üzerinde statik bir yöntem de çağrılabilir: bu durumda derleyicinin kendisi değişkenin türünü belirler ve türüne göre statik yöntemi çağırır:
kod | Derleyici bunu nasıl görür? |
---|---|
|
|
|
|
|
|
Sınıfta çağrılabilir
Bir sınıfta yalnızca statik bir yöntem çağırabilirsiniz. Sıradan bir yöntemi çağırmak için, sınıfın bir örneğine başvuruya ihtiyacınız vardır. Bu nedenle, bu yapıyı kullanarak sıradan bir yöntemi çağıramazsınız:ClassName.methodName(arguments)
GO TO FULL VERSION