logo

Neden statik olmayan değişkene Java'daki statik bir bağlamdan başvuru yapılamıyor?

Hata Statik olmayan değişkene Java'daki statik bir bağlamdan başvurulamaz Java programının derlenmesi sırasında çoğunlukla yeni başlayanların karşılaştığı bir durumdur. Bu hatanın oluşmasının sebebi main() metodunda statik olmayan bir üye değişken kullanmalarıdır. Java'daki main() yöntemi statik bir yöntem olduğundan ve otomatik olarak çağrıldığından, onu çağırmak için bir nesne oluşturmamıza gerek yoktur. Hatayı anlamak için önce şunu anlamalıyız statik Ve statik olmayan Java'da yöntem .

Statik Yöntem

İçinde Java , public yöntemler sınıfın bir örneğine aittir ancak hakkında konuşursak statik yöntem , bir sınıfın örneğine değil, bir sınıfa aittirler. Statik bir yöntemi çağırmak için sınıfın bir örneğini oluşturmaya gerek yoktur. Statik üye yalnızca statik veri üyesine erişebilir ve değerini değiştirebilir.

Statik Olmayan Yöntem

Sahip olmadan tüm yöntemler statik yöntem adından önceki anahtar kelimeye şu ad verilir: Statik olmayan yöntemler. Statik yönteme ve statik değişkene erişmek için sınıfın bir örneğini oluşturmaya gerek yoktur. Statik olmayan yöntemler dinamik veya çalışma zamanı bağlaması kullanılır. Farklı statik yöntemini geçersiz kılabiliriz statik olmayan yöntem.

Bir Java programı oluşturalım ve aynı hatayı üretelim.

char'ı int java'ya dönüştür

Aşağıdaki örnekte özel bir değişken tanımladık. sayı main() yönteminden önce int yazın. Main() yönteminde sayıyı 1 artırmaya çalışıyoruz. Şunu belirtelim ki main() yöntemi statik bir yöntem olup, değişken statik değildir. Yukarıdaki programı derlediğimizde aşağıda gösterdiğimiz gibi aynı hatayı alıyoruz.

Statik Örnek1.java

 public class StaticExample { private int number=0; public static void main(String args[]){ number++; System.out.println(number); } } 

Çıktı:

maven'i yükle
Neden statik olmayan değişkene Java'daki statik bir bağlamdan başvuru yapılamıyor?

Şimdi değişkeni tanımlayalım sayı Statik olarak kodu derleyin. Değişken ve main() yönteminin her ikisinin de statik olduğunu unutmayın.

Statik Örnek2.java

 class staticExample { private static int number=0; public static void main(String args[]){ number++; System.out.println(number); } } 

Çıktı:

Neden statik olmayan değişkene Java'daki statik bir bağlamdan başvuru yapılamıyor?

Program başarıyla derlenir ve çalışır.

css listeleri

Statik olmayan bir değişkenin her örneği farklı bir değere sahiptir ve new() operatörü bir nesnenin örneğini başlattığında oluşturulur. Statik değişkenler, sınıf yüklendiğinde oluşturulur veya başlatılır. JVM .

Statik olmayan değişkeni çağırmak için bir nesne örneğine ihtiyacımız var. Statik olmayan veya örnek değişkene farklı değerler vererek birçok nesne oluşturabiliriz.

Statik Örnek3.java

 class variable { int number; public static void increment() { number++; } } class StaticExample { public static void main(String args[]) { variable var1 = new variable(); variable var2 = new variable(); variable var3 = new variable(); var1.number = 12; var2.number = 13; var3.number = 14; variable.increment(); System.out.println(var1.number); System.out.println(var2.number); System.out.println(var3.number); } } 

Çıktı:

Neden statik olmayan değişkene Java'daki statik bir bağlamdan başvuru yapılamıyor?

Yukarıdaki programda üç nesne, var1, var2, var3 , sınıf için yaratılmıştır değişken ve nesnelere 12, 13, 14 olmak üzere üç farklı değer atadık var1, var2 , Ve var3 , sırasıyla. Şimdi sayı Her nesnenin özelliğinin kendi tamsayı değeri vardır. Increment() yöntemini çağırarak number özelliğinin değerini artırmaya çalıştığımızda, derleyici, yöntemin değeri hangi sayı değeri kadar artırması gerektiğini anlamıyor. Derleyici belirsizlik hatasıyla karşı karşıya kalır ve derleme zamanı hatasını atar Statik olmayan değişkene statik bağlamdan başvurulamaz .

Hatanın Çözümü

Sorunu çözmenin basit bir yolu var Statik olmayan değişkene statik bağlamdan başvurulamaz hata. Yukarıdaki kodda statik olmayan değişkeni nesne adıyla ele almamız gerekiyor. Basit bir şekilde, statik bir bağlamdan statik olmayan bir değişkene atıfta bulunmak için sınıfın bir nesnesini yaratmamız gerekir. Yeni bir değişken örneği oluşturulduğunda, tüm statik olmayan değişkenlerin yeni bir kopyası oluşturulur. Yani sınıfın yeni örneğinin referansını kullanarak bu değişkenlere erişebiliriz. örneğin aşağıdaki Java programını düşünün.

coomeet gibi siteler

Statik Örnek4.java

 class staticExample { int number = 0; public static void main(String args[]) { // using non-static variable by creating an object of the class staticExample test = new staticExample(); test.number++; System.out.println(test.number);a } } 

Çıktı:

Neden statik olmayan değişkene Java'daki statik bir bağlamdan başvuru yapılamıyor?

Tanım

Yukarıdaki programda number özelliğine sınıf adını kullanarak erişiyoruz. statik Örnek. StaticExample sınıfı adında bir nesne yaratıyoruz Ölçek ve artırın sayının değeri test nesnesini kullanarak.