what is static keyword java
Bu Öğretici Java'da Statik Anahtar Kelimeyi ve Değişkenler, Yöntemler, Bloklar ve Sınıflarda Kullanımını Açıklar. Ayrıca Statik ve Statik Olmayan Üyeler Arasındaki Farkı Belirtmektedir:
Java, değişkenlerinin, yöntemlerinin, sınıflarının vb. Kapsamını ve davranışını belirtmek için çeşitli bildirim türlerini destekler. Örneğin, anahtar sözcük final, sealed, static, vb. Tüm bu bildirimlerin Java programında kullanıldıklarında belirli bir anlamı vardır.
Bu eğiticiye devam ederken tüm bu anahtar kelimeleri keşfedeceğiz. Burada, Java'daki en önemli anahtar kelimelerden birinin ayrıntılarını, yani “statik” tartışacağız.
Ne öğreneceksin:
- Java'da Statik Anahtar Kelime
- Sonuç
Java'da Statik Anahtar Kelime
Java programındaki bir üye, bildiriminden / tanımından önce gelen 'statik' anahtar sözcüğü kullanılarak statik olarak bildirilebilir. Bir üye statik olarak bildirildiğinde, bu, temelde üyenin, her bir örnek için kopya oluşturmadan bir sınıfın tüm örnekleri tarafından paylaşıldığı anlamına gelir.
Bu nedenle statik, Java'da kullanılan sınıf dışı bir değiştiricidir ve aşağıdaki üyelere uygulanabilir:
- Değişkenler
- Yöntemler
- Bloklar
- Sınıflar (daha spesifik olarak, iç içe geçmiş sınıflar)
Bir üye statik olarak bildirildiğinde, o zaman bir nesne kullanmadan erişilebilir. Bu, bir sınıfın somutlaştırılmasından önce statik üyenin etkin ve erişilebilir olduğu anlamına gelir. Sınıfın nesnesi kapsam dışına çıktığında varlığı sona eren diğer statik olmayan sınıf üyelerinden farklı olarak, statik üye hala açıkça etkindir.
Java'da Statik Değişken
Statik olarak bildirilen bir sınıfın üye değişkenine Statik Değişken adı verilir. 'Sınıf değişkeni' olarak da adlandırılır. Değişken statik olarak bildirildikten sonra, bellek yalnızca bir kez ayrılır ve bir sınıf başlatıldığında her seferinde tahsis edilmez. Böylece statik değişkene bir nesneye referans olmadan erişebilirsiniz.
Aşağıdaki Java programı, Statik değişkenlerin kullanımını göstermektedir:
class Main { // static variables a and b static int a = 10; static int b; static void printStatic() { a = a /2; b = a; System.out.println('printStatic::Value of a : '+a + ' Value of b : '+b); } public static void main(String() args) { printStatic(); b = a*5; a++; System.out.println('main::Value of a : '+a + ' Value of b : '+b); } } Çıktı:

Yukarıdaki programda, iki statik değişkenimiz var, yani a ve b. Bu değişkenleri hem 'printStatic' hem de 'main' fonksiyonunda değiştiriyoruz. Bu statik değişkenlerin değerlerinin, işlevin kapsamı sona erdiğinde bile işlevler boyunca korunduğuna dikkat edin. Çıktı, değişkenlerin değerlerini iki işlevde gösterir.
Neden Statik Değişkenlere İhtiyacımız Var ve Nerelerde Faydalıdır?
Statik değişkenler, en çok sayaç gerektiren uygulamalarda kullanışlıdır. Bildiğiniz gibi sayaçlar normal değişkenler olarak bildirilirse yanlış değerler verecektir.
Örneğin, bir sınıfa sahip bir uygulamada sayaç olarak ayarlanmış normal bir değişkeniniz varsa car diyelim. Daha sonra, bir araba nesnesi oluşturduğumuzda, normal sayaç değişkeni her örnekle başlatılacaktır. Ancak statik veya sınıf değişkeni olarak bir sayaç değişkenimiz varsa, o zaman sınıf yaratıldığında yalnızca bir kez başlatılacaktır.
Daha sonra, sınıfın her örneğinde bu sayaç bir artırılacaktır. Bu, her durumda sayacın artırılacağı ancak sayacın değerinin her zaman 1 olacağı normal değişkenden farklıdır.
Bu nedenle, sınıf arabanın yüz nesnesini yaratsanız bile, normal değişken olarak sayaç her zaman 1 değerine sahip olurken, statik bir değişkenle 100'ün doğru sayısını gösterecektir.
Aşağıda Java'daki Statik sayaçların başka bir örneği verilmiştir:
class Counter { static int count=0;//will get memory only once and retain its value Counter() { count++;//incrementing the value of static variable System.out.println(count); } } class Main { public static void main(String args()) { System.out.println('Values of static counter:'); Counter c1=new Counter(); Counter c2=new Counter(); Counter c3=new Counter(); } } Çıktı:

Statik değişkenin çalışması yukarıdaki programda belirgindir. Sayım değişkenini başlangıç değeri = 0 ile bildirdik. Ardından sınıfın yapıcısında statik değişkeni artırıyoruz.
Ana işlevde, sınıf sayacının üç nesnesini oluşturuyoruz. Çıkış, sayaç nesnesi her oluşturulduğunda statik değişkenin değerini gösterir. Oluşturulan her nesne ile mevcut statik değişken değerinin artırıldığını ve yeniden başlatılmadığını görüyoruz.
Java Statik Yöntemi
Java'daki bir yöntem, önünde 'statik' anahtar sözcüğü bulunduğunda statiktir.
Statik yöntem hakkında hatırlamanız gereken bazı noktalar şunlardır:
PC'yi temizlemek için en iyi yazılım
- Statik bir yöntem, bir sınıfın örneği kullanılarak çağrılan diğer statik olmayan yöntemlere karşı sınıfa aittir.
- Statik bir yöntemi çağırmak için bir sınıf nesnesine ihtiyacınız yoktur.
- Sınıfın statik veri üyelerine statik yöntemle erişilebilir. Statik yöntem, statik veri üyesinin değerlerini bile değiştirebilir.
- Statik bir yöntemin 'bu' veya 'süper' üyelere referansı olamaz. Statik bir yöntem onlara başvurmaya çalışsa bile, bu bir derleyici hatası olacaktır.
- Statik veriler gibi, statik yöntem de diğer statik yöntemleri çağırabilir.
- Statik bir yöntem, statik olmayan veri üyelerine veya değişkenlere başvuramaz ve statik olmayan yöntemleri de çağıramaz.
Aşağıdaki program Java'da statik yöntemin uygulanmasını gösterir:
class Main { // static method static void static_method() { System.out.println('Static method in Java...called without any object'); } public static void main(String() args) { static_method(); } } Çıktı:

Bu basit bir örnektir. Sadece bir mesaj yazdıran statik bir yöntem tanımlarız. Daha sonra ana işlevde, statik yöntem herhangi bir nesne veya sınıf örneği olmadan çağrılır.
Java'da Statik Anahtar Kelime Uygulamasına Başka Bir Örnek.
class Main { // static variable static int count_static = 5; // instance variable int b = 10; // static method static void printStatic() { count_static = 20; System.out.println('static method printStatic'); // b = 20; // compilation error 'error: non-static variable b cannot be referenced from a static context' //inst_print(); // compilation error 'non-static method inst_print() cannot be referenced from a static //context' //System.out.println(super.count_static); // compiler error 'non-static variable super cannot be //referenced from a static context' } // instance method void inst_print() { System.out.println('instance method inst_print'); } public static void main(String() args) { printStatic(); } } Yukarıdaki programda gördüğünüz gibi iki yöntemimiz var. PrintStatic yöntemi statik bir yöntemken, inst_print bir örnek yöntemidir. Ayrıca iki değişkenimiz var, static_count statik bir değişken ve b bir örnek değişkendir.
Statik yöntemde - printStatic, önce bir mesaj görüntüleriz ve ardından örnek değişkeninin değerini değiştirmeye çalışırız ve ayrıca statik olmayan yöntemi çağırırız.
Sonra, 'süper' anahtar kelimesini kullanmaya çalışıyoruz.
b = 20;
inst_print ();
System.out.println (super.count_static);
Programı yukarıdaki satırlarla çalıştırdığımızda, örnek değişkenleri kullanmak, statik olmayan yöntemleri çağırmak ve statik bağlamda super'e başvurmak için derleme hataları alıyoruz. Bunlar statik yöntemin sınırlamalarıdır.
Yukarıdaki üç satıra yorum yaptığımızda, ancak o zaman yukarıdaki program iyi çalışır ve aşağıdaki çıktıyı üretir.
Çıktı:
Statik Yöntemin Aşırı Yüklenmesi ve Geçersiz Kılması
Hepinizin bildiği gibi, hem Aşırı Yükleme hem de Geçersiz Kılma, OOPS'nin özellikleridir ve polimorfizme yardımcı olurlar. Aşırı yükleme, aynı ada sahip ancak farklı parametre listelerine sahip yöntemlere sahip olabileceğiniz derleme zamanı polimorfizmi olarak sınıflandırılabilir.
Geçersiz kılma, çalışma zamanı polimorfizminin bir özelliğidir ve bu durumda, temel sınıf yöntemi türetilmiş sınıfta geçersiz kılınır, böylece yöntem imzası veya prototip aynı olur, ancak tanım farklıdır.
Java'da Aşırı Yükleme ve Geçersiz Kılmanın statik sınıfı nasıl etkilediğini tartışalım.
Aşırı yükleme
Java'da statik bir yöntemi farklı parametre listeleri ile ancak aynı ada sahip aşırı yükleyebilirsiniz.
Aşağıdaki program Aşırı Yüklemeyi gösterir:
public class Main { public static void static_method() { System.out.println('static_method called '); } public static void static_method(String msg) { System.out.println('static_method(string) called with ' + msg); } public static void main(String args()) { static_method(); static_method('Hello, World!!'); } } Çıktı:

Bu programın aynı 'static_method' adında ancak farklı bir argüman listesine sahip iki statik yöntemi vardır. İlk yöntem herhangi bir bağımsız değişken almaz ve ikinci yöntem bir dize bağımsız değişkeni alır.
Unutulmaması gereken bir nokta, yöntemi yalnızca 'statik' anahtar kelimeye bağlı olarak aşırı yükleyemeyeceğinizdir. Örneğin, bir örnek yönteminiz 'toplam' varsa ve başka bir yöntem 'toplam' tanımlar ve bunu statik olarak bildirirseniz, o zaman işe yaramayacaktır. 'Statik' bir anahtar kelimeye dayalı bu aşırı yükleme girişimi, derleme başarısızlığına neden olacaktır.
Geçersiz kılma
Statik yöntemler, sınıfın herhangi bir nesnesi olmadan çağrıldığından, türetilmiş sınıfta aynı imzaya sahip statik bir yönteme sahip olsanız bile, geçersiz kılınmayacaktır. Bunun nedeni, örnek olmadan çalışma zamanı polimorfizminin olmamasıdır.
Dolayısıyla, statik bir yöntemi geçersiz kılamazsınız. Ancak türetilmiş sınıfta aynı imzaya sahip statik bir yöntem varsa, o zaman çağırılacak yöntem çalışma zamanında nesnelere bağlı değildir, ancak derleyiciye bağlıdır.
Statik yöntemler geçersiz kılınamasa da, türetilmiş sınıfta temel sınıf yöntemiyle aynı imzaya sahip bir yönteme sahip olduğunuzda Java dilinin herhangi bir derleyici hatası vermediğini unutmamalısınız.
Aşağıdaki uygulama bu noktayı kanıtlamaktadır.
classBase_Class { // Static method in base class which will be hidden in substatic_displayclass public static void static_display() { System.out.println('Base_Class::static_display'); } } classDerived_Class extends Base_Class { public static void static_display() { System.out.println('Derived_Class::static_display'); } } public class Main { public static void main(String args( )) { Base_Class obj1 = new Base_Class(); Base_Class obj2 = new Derived_Class(); Derived_Class obj3 = new Derived_Class(); obj1.static_display(); obj2.static_display(); obj3.static_display(); } } Çıktı:

Yukarıdaki programda, çağrılan statik yöntemin işaretçinin işaret ettiği nesneye bağlı olmadığını görebilirsiniz. Bunun nedeni, nesnelerin statik yöntemlerle hiç kullanılmamasıdır.
Java'da Statik Blok
Java'da da C ++, C # vb. Programlama dillerinde fonksiyon bloklarınız olduğu gibi, genellikle statik verilerle ilgili bir kod bloğu içeren 'statik' blok adı verilen özel bir blok vardır.
Bu statik blok, sınıfın ilk nesnesi oluşturulduğunda (tam olarak sınıf yükleme sırasında) veya bloğun içindeki statik üye kullanıldığında yürütülür.
Aşağıdaki program statik bir bloğun kullanımını göstermektedir.
class Main { static int sum = 0; static int val1 = 5; static int val2; // static block static { sum = val1 + val2; System.out.println('In static block, val1: ' + val1 + ' val2: '+ val2 + ' sum:' + sum); val2 = val1 * 3; sum = val1 + val2; } public static void main(String() args) { System.out.println('In main function, val1: ' + val1 + ' val2: '+ val2 + ' sum:' + sum); } } Çıktı:

Yukarıdaki programdaki ifadelerin yürütme sırasına dikkat edin. Statik bloğun içeriği ilk olarak, ardından ana program tarafından yürütülür. Statik değişkenler sum ve val1 başlangıç değerlerine sahipken val2 başlatılmaz (varsayılan olarak 0'dır). Daha sonra statik blokta val2'ye hala bir değer atanmaz ve dolayısıyla değeri 0 olarak görüntülenir.
world of warcraft en iyi özel sunucu
Val2 değişkenine statik blokta yazdırıldıktan sonra değer atanır ve toplam yeniden hesaplanır. Bu nedenle, ana fonksiyonda, farklı toplam ve val2 değerleri elde ederiz.
Bir kurucu belirtirseniz, statik bloğun içeriği yapıcıdan önce bile yürütülür. Statik bloklar çoğunlukla sınıfın statik üyelerini ve statik üyelerle ilgili diğer başlatmaları başlatmak için kullanılır.
Java Statik Sınıfı
Java'da statik bloklara, statik yöntemlere ve hatta statik değişkenlere sahipsiniz. Dolayısıyla statik sınıflara sahip olabileceğiniz açıktır. Java'da, başka bir sınıfın içinde bir sınıfa sahip olmak mümkündür ve buna İç içe sınıf adı verilir. Yuvalanmış sınıfı çevreleyen sınıfa Outer sınıf denir.
Java'da, yuvalanmış bir sınıfı Statik olarak bildirebilmenize rağmen, dış sınıfı Statik olarak belirtmeniz mümkün değildir.
Şimdi Java'daki statik yuvalanmış sınıfları inceleyelim.
Java'da Statik Yuvalanmış Sınıf
Daha önce de belirtildiği gibi, Java'da statik olarak bildirilmiş iç içe geçmiş bir sınıfınız olabilir. Statik iç içe geçmiş sınıf, aşağıda listelendiği gibi bazı yönlerden statik olmayan iç içe geçmiş sınıftan (iç sınıf) farklıdır.
Statik olmayan iç içe geçmiş sınıfın aksine, iç içe yerleştirilmiş statik sınıfın bir dış sınıf başvurusuna ihtiyacı yoktur.
Statik iç içe geçmiş bir sınıf, dış sınıfın statik ve statik olmayan üyelerine erişebilen statik olmayan sınıflara karşı dış sınıfın yalnızca statik üyelerine erişebilir.
Statik iç içe geçmiş bir sınıf örneği aşağıda verilmiştir.
class Main{ private static String str = 'SoftwareTestingHelp'; //Static nested class static class NestedClass{ //non-static method public void display() { System.out.println('Static string in OuterClass: ' + str); } } public static void main(String args()) { Main.NestedClassobj = new Main.NestedClass(); obj.display(); } } Çıktı:

Yukarıdaki programda, statik iç içe geçmiş sınıfın dış sınıftan statik değişkene (dizge) erişebildiğini görüyorsunuz.
Java'da Statik İçe Aktarma
Bildiğiniz gibi, genellikle 'import' direktifini kullanarak Java programına çeşitli paketleri ve önceden tanımlanmış işlevleri dahil ediyoruz. Statik sözcüğünü import yönergesiyle birlikte kullanmak, sınıf adını kullanmadan sınıf işlevini kullanmanıza izin verir.
Misal:
import static java.lang.System.*; class Main { public static void main(String() args) { //here we import System class using static, hence we can directly use functionality out.println('demonstrating static import'); } } Çıktı:
bugün c ++ ne için kullanılıyor

Bu programda java.lang.System sınıfı için static import kullanıyoruz.
Not: Ana işlevde, mesajı görüntülemek için out.println'i kullandık.
Statik içe aktarma özelliği, kodu daha kısa ve okunaklı hale getirse de, özellikle bazı paketler aynı işlevlere sahip olduğunda bazen belirsizlik yaratır. Bu nedenle, statik içe aktarma yalnızca çok ihtiyaç duyulduğunda kullanılmalıdır.
Statik ve Statik Olmayan
Java'nın Statik ve Statik Olmayan üyeleri arasındaki temel farkları tartışalım.
Aralarındaki farklar aşağıda listelenmiştir Statik ve Statik Olmayan değişkenler .
| Statik Değişkenler | Statik Olmayan Değişkenler |
|---|---|
| Yalnızca sınıf adı kullanılarak erişilebilir. | Erişmek için bir sınıfın nesnelerini gerektirir. |
| Hem statik hem de statik olmayan yöntemlere erişilebilir. | Yalnızca statik olmayan yöntemlerle erişilebilir. |
| Statik değişken için bir bellek, sınıf başına yalnızca bir kez ayrılır. | Statik olmayan değişkenler için bir bellek nesne başına ayrılır. |
| Sınıfın tüm nesneleri tarafından paylaşılır. | Nesne başına değişkenin bir kopyası yapılır. |
| Global kapsama sahiptir ve tüm yöntemler ve bloklar tarafından kullanılabilir. | Yerel kapsama sahiptir ve sınıfın nesneleri tarafından görülebilir. |
Aşağıda verilen, Statik ve Statik Olmayan yöntemler arasındaki farktır. .
| Statik Yöntemler | Statik Olmayan Yöntemler |
|---|---|
| Statik bir anahtar sözcükten önce gelen ve sınıf düzeyinde kullanılabilen bir yöntem. | Statik anahtar sözcüğünden önce gelmeyen ve sınıfın her örneği için kullanılabilen bir yöntem. |
| Derleme zamanı veya erken bağlamayı destekler. | Çalışma zamanı veya dinamik bağlamayı destekler. |
| Yalnızca sınıfının statik veri üyelerine ve diğer sınıflara erişebilir. | Sınıfın ve diğer sınıfların statik ve statik olmayan üyelerine erişebilir. |
| Statik yöntemler geçersiz kılınamaz. | Geçersiz kılınabilir. |
| Hafıza yalnızca bir kez tahsis edilir. Dolayısıyla kullanılan bellek daha azdır. | Yöntem her çağrıldığında bellek ayrıldığından bellek tüketimi daha fazladır. |
Statik ve Final
Statik ve Son, Java'da birlikte kullanıldığı varlığa özel bir anlam verebilen iki anahtar sözcüktür. Örneğin, bir değişken statik olarak bildirildiğinde, nesneye başvuru olmadan erişilebilen bir sınıf değişkeni haline gelir.
Benzer şekilde, bir değişken nihai olarak bildirildiğinde, değişmez, yani sabit olur.
Java'daki Statik ve Nihai anahtar kelimeler arasındaki bazı önemli farklılıkları tablo haline getirelim.
| Statik | Final |
|---|---|
| Statik bir veri üyesi (yuvalanmış sınıf, değişken veya yöntem), önünde statik anahtar sözcük bulunan bir veri üyesidir ve bir nesne olmadan erişilebilir. | Son anahtar kelime bir değişkene, yönteme, sınıfa vb. Uygulanabilir. ve kuruluşlara kısıtlamalar getirir. |
| Bildirim sırasında statik değişkeni değerle başlatmak zorunlu değildir. | Son değişkenin bildirim sırasında bir değere başlatılması gerekir. |
| Statik değişkenleri yeniden başlatabilirsiniz. | Son değişkenleri yeniden başlatmak mümkün değil. |
| Statik yöntemler, yalnızca statik üyelere erişebilen yöntemlerdir. | Nihai yöntemler, miras alınamayan / geçersiz kılınamayan yöntemlerdir. |
| Statik sınıflar, nesneleri yaratılamayan sınıflardır. | Nihai sınıflar, miras alınamayan sınıflardır. |
Sıkça Sorulan Sorular
S # 1) Java Sınıfı Statik olabilir mi?
Cevap: Evet, Java'daki bir sınıf, dış sınıf olmaması koşuluyla statik olabilir. Bu, yalnızca Java'daki yuvalanmış sınıfların statik olabileceği anlamına gelir.
S # 2) Java'da Static'i ne zaman kullanmalıyım?
Cevap: Programınızda, değerini nesneler arasında tutması gereken bir veri üyesi istediğinizde, statik kullanmalısınız. Örneğin, bir sayaç. Bir nesne kullanarak onu çağırmak istemediğinizde bir yöntem statik olarak bildirilebilir.
S # 3) Statik Sınıf bir Oluşturucuya sahip olabilir mi?
Cevap: Evet, statik bir sınıfın bir kurucusu olabilir ve amacı yalnızca statik veri üyelerini başlatmaktır. Yalnızca veri üyelerine erişildiğinde ilk kez çağrılacaktır. Sonraki erişim için çağrılmayacaktır.
S # 4) Static Constructor'ın kullanımı nedir?
Cevap: Genel olarak yapıcı, statik veri üyelerini başlatmak için kullanılır. Ayrıca yalnızca bir kez gerçekleştirilmesi gereken işlemleri / eylemleri gerçekleştirmek için de kullanılır.
S # 5) Statik yöntemler Java'da miras alınır mı?
Cevap: Evet, Java'daki statik yöntemler miras alınır ancak geçersiz kılınmaz.
Sonuç
Bu eğitimde, Java'nın statik anahtar sözcüğünü veri üyelerinde, yöntemlerde, bloklarda ve sınıflarda kullanımıyla birlikte ayrıntılı olarak tartıştık. Statik anahtar sözcük, sınıf düzeyini veya genel kapsamı belirtmek için kullanılan bir anahtar sözcüktür.
Sınıfın örneklerini kullanarak statik üyelere erişmenize gerek yoktur. Sınıf adını kullanarak statik veri üyelerine doğrudan erişebilirsiniz. Statik ve statik olmayan üyelerin yanı sıra statik ve son anahtar sözcükler arasındaki temel farkları da tartıştık.
Sonraki konularımızda, daha fazla anahtar kelimeyi ve bunların Java dilindeki önemini keşfedeceğiz.
Önerilen Kaynaklar
- C ++ 'da Statik
- Java Arayüzü ve Örneklerle Soyut Sınıf Eğitimi
- Java Dağıtımı: Java JAR Dosyasının Oluşturulması ve Yürütülmesi
- Java Sanal Makinesi: JVM, Java Uygulamasını Çalıştırmada Nasıl Yardımcı Olur?
- C # Kavramları: Yapıcı, Yıkıcı, Statik Sınıf, Yapısal ve Enum
- Java'da Erişim Değiştiriciler - Örneklerle Eğitim
- Örneklerle Java Yansıtma Eğitimi
- Java Programlama Diline Giriş - Video Eğitimi
