Düzeltme: Statik Olmayan Bir Statik İçeriğe Referans Verilemiyor

Programcıların çoğu, kodlama yaparken ' Statik olmayan yöntem statik bir bağlamdan referans alınamıyor ' hata mesajıyla karşılaşıyor. Bu hata mesajı belirli değildir ve hatanın koşulları doğruysa herhangi bir IDE'de oluşabilir.

Statik Olmayan Bir Yönteme Statik Bir Bağlamdan Referans Verilemez

Bu, programcının sınıfın bir örneğini yapmadan 'statik' bir sınıf kullanmaya çalıştığı yeni başlayanlar için çok yaygın bir hatadır. Statik olan bir sınıf kullanırken karşılanması gereken birkaç koşul vardır. Bu makalede, birkaç farklı durumdan geçeceğiz ve statik bir sınıfın nasıl kullanılacağı konusunda size rehberlik edeceğiz.

Statik Yöntem Nedir?

'Statik' anahtar sözcüğünü herhangi bir yönteme eklemek, yöntemi statik yöntem olarak bilinir. Statik bir yöntem, bir nesneye ait olmak yerine (norm olan) sınıfa aittir. Statik bir yöntem, bir sınıfın örneğini oluşturma şartı olmadan kolayca çağrılabilir.

Statik yöntemlerin birkaç farklı kullanımı vardır, örneğin, kullanarak, statik bir veri üyesini ve değerini değiştirebilirsiniz. Bununla birlikte, Statik bir yöntem kullanırken hala bazı sınırlamalar vardır. Örneğin, sınıfınızın statik olmayan alanlarına erişmek istiyorsanız, statik olmayan bir yöntem kullanmanız gerekir. Özetlemek gerekirse, Statik yöntemler çok nadir kullanılır, ancak faydaları vardır.

İşte tüm nesnelerin özelliklerini değiştirmek için statik bir yöntemin nasıl yapılabileceğinin kısa bir örneği.

 sınıf Öğrencileri {int roll_no; Dize adı; statik String college = "InformationTech"; statik boşluk değişikliği () {college = “Management”;} Öğrenciler (int sayısı, String name_self) {roll_no = number; name = name_self;} void display () {System.out.println (rollno + "" + name + "" + + college);} public static void main (String args []) {Students.change (); Öğrenciler stu_1 = yeni Öğrenciler (100, "Meksika"); Öğrenciler stu_2 = yeni Öğrenciler (202, "Amerikan"); Öğrenciler stu_3 = yeni Öğrenciler (309, "İngiliz"); stu_1.display (); stu_2.display (); stu_3.display ();}} 

Programın çıktısı:

 100 Meksika Yönetimi 202 Amerikan Yönetimi 309 İngiliz Yönetimi 

Bir sınıfla bir sınıfın örneği arasındaki fark nedir?

Sokakta yürüdüğünü ve bir araba gördüğünü düşünüyorum. Şimdi onun modelinin veya türünün ne olduğunu bilmiyor olsanız bile hemen bunun bir araba olduğunu anlıyorsunuz. Bunun sebebi, bunun zaten bildiğiniz 'otomobiller' sınıfına ait olduğunu biliyorsunuzdur. Sınıfı burada bir şablon veya fikir olarak düşünün.

Şimdi yaklaştıkça modelden ve arabadan çıkarsınız. Burada 'araba' sınıfının 'örneğini' tanıyorsunuz. Burada tüm özellikler ayrıntılı olarak gösterilecek; tekerlekler, beygir gücü, jantlar vb.

Özelliklerin bir örneği, 'otomobil' sınıfının tüm otomobillerin tekerlekleri olması gerektiğini belirtmesi olabilir. Gördüğünüz otomobil (otomobil sınıfının bir örneği) alaşım jantlara sahip.

Nesne yönelimli programlamada, sınıfı kendiniz ve sınıfın içinde tanımlarsınız, 'color' tipinde bir alan tanımlarsınız. Sınıf başlatıldığında, arka uçta ve daha sonradaki renk için bellek otomatik olarak ayrılır, buna belirli bir değer verebilirsiniz (örneğin kırmızı). Bunun gibi özellikler belirgin olduğundan, statik değildir.

Buna karşılık, statik yöntemler ve alanlar tüm örneklerle paylaşılır. Bunlar, örneğin kendisine değil, sınıfa özgü değer veya öğeler için yapılır. Yöntemler için, genel yöntemler olabilir (örneğin stringtoInt dönüştürücü) ve alanlar için, bunlar kodunuza göre genellikle sabittir (örneğin, yalnızca normal otomobiller üretiyorsanız, araba tipi statik olabilir).

Şimdi, kodlamanızın yanlış gidebileceği tüm farklı durumlara bakacağız ve bunları düzeltmek için geçici çözümleri göreceğiz.

Sayı 1: Var olmayan bir şeyi çağırıyorsunuz

Kullanıcıların hem statik hem de statik olmayan yöntemleri birbirleriyle kullandığı bazı durumlar ile karşılaştık. Bunu yaptığımızda, hangi yöntemin neyi çağırdığına dikkat etmelisiniz (statik veya değil). Aşağıdaki koda bir göz atın:

 private java.util.List someMethod () {/ * Some Code * / return someList; } public static void main (String [] strArgs) {// Aşağıdaki ifade hataya neden olur. Nedenini biliyorsun .. java.util.List someList = someMethod (); } 

Burada statik yöntem someMethod'u çağırıyor. Nesne yönelimli programlamada, verileri çalışmak istediğimiz verilerle birlikte kapsıyoruz. Burada, bir nesne olmadan, örnek veri yoktur ve örnek yöntemleri sınıf tanımının bir parçası olarak bulunurken, onlara veri sağlamak için her zaman bir nesne örneği bulunmalıdır.

Sonuç olarak, var olmayan bir şeyi arayamazsınız. Bir nesne yaratmamış olabileceğinizden, statik olmayan yöntem henüz mevcut değil. Bununla birlikte, diğer taraftan, statik bir yöntem her zaman var olacaktır (tanım nedeniyle).

Sorun 2: Yöntemler Statik Edilmedi

Statik ana yönteminizden, yöntemlerin bir örneğini oluşturmadan yöntemleri çağırıyorsanız, bir hata mesajı alırsınız. Burada aynı prensip geçerlidir; var olmayan bir şeye erişemezsin.

 genel sınıf BookStoreApp2 {// seçenekler için sabitler Tarayıcı girişi = yeni Tarayıcı (System.in); public static void main (String [] args) {BookStoreItem [] öğe; // ilan dizisi öğesi = new BookStoreItem [10]; // dizini başlatma int itemType = -1; menüyüGöster (); getUserChoice (); (int i = 0; i <item.length; i ++) {} // anahtar ifadesinin sonu} // için döngü sonu (int i = 0; i <item.length; i ++) {} // bitişi için için} // ana yöntemin sonu 

Burada bu kodda, printMenu () ve getUserChoice () yöntemlerinin ikisinin de statik yöntemlere dönüştürülmesi gerekir.

Dolayısıyla, böyle bir durumun üstesinden gelmek istiyorsanız, bunun yerine bir kurucu kullanabilirsiniz. Örneğin, main () yönteminizin içeriğini alabilir ve bunları bir yapıcıya yerleştirebilirsiniz.

 public BookStoreApp2 () {// Ana yöntemin içeriğini buraya yerleştirin} Bunu yaptıktan sonra, main () yönteminizin içinde şunları yapın: public void main (String [] args) {new BookStoreApp2 (); } 

Bu ipuçları sizin veya kodunuzda işe yaramazsa, Statik sınıfların ve yöntemlerin temel ilkelerini aklınızda tutmalı ve temel ilkenin ihlal edilmediğinden emin olmak için kodunuzu yeniden kontrol etmelisiniz.

Ilginç Haberler