Düzeltme: Statik Olmayan Yönteme Statik Bağlamdan Başvurulamaz
Birçok programcı "Statik olmayan yönteme statik bir bağlamdan başvurulamaz’Kodlarken. Bu hata mesajı spesifik değildir ve hatanın koşulları doğruysa herhangi bir IDE'de ortaya çıkabilir.
Bu, programcının sınıfın bir örneğini oluşturmadan bir sınıfı "durağan" olarak kullanmaya çalıştığı yeni başlayanlar için çok yaygın bir hatadır. Statik olan bir sınıf kullandığınızda karşılanması gereken birkaç koşul vardır. Bu makalede, birkaç farklı durumu inceleyeceğiz ve statik bir sınıfın nasıl kullanılacağı konusunda size rehberlik edeceğiz.
Statik Yöntem nedir?
Herhangi bir yönteme "statik" anahtar kelimesini eklemek, yöntemi statik yöntem olarak bilinir hale getirir. Statik bir yöntem, bir nesneye (norm olan) ait olmaktan çok sınıfa aittir. Statik bir yöntem, bir sınıfın bir örneğini oluşturma koşulu olmadan kolayca çağrılabilir.
Statik yöntemlerin birkaç farklı kullanımı vardır, örneğin, onu kullanarak, statik bir veri üyesini ve değerini değiştirebilirsiniz. Bununla birlikte, Statik bir yöntem kullanılı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 kullanmalısınız. Özetlemek gerekirse, Statik yöntemler çok seyrek 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ğine dair kısa bir örnek.
class Öğrenciler {int roll_no; Dize adı; statik String kolej = "InformationTech"; statik boşluk değişikliği () {kolej = "Yönetim";} Öğrenciler (int sayı, Dize adı_self) {roll_no = sayı; name = name_self;} void display () {System.out.println (rollno + "" + name + "" + kolej);} public static void main (String args []) {Students.change (); Öğrenciler stu_1 = yeni Öğrenciler (100, "Meksikalı"); Öğ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ı şöyle olacaktır:
100 Meksika Yönetimi 202 Amerikan Yönetimi 309 İngiliz Yönetimi
Bir sınıf ve bir sınıf örneği arasındaki fark nedir?
Sokakta yürüdüğünüzü düşünün ve bir araba gördünüz. Şimdi, modelinin veya tipinin ne olduğunu bilmeseniz bile, bunun bir araba olduğunu hemen anlarsınız. Bunun nedeni, bunun zaten bildiğiniz "arabalar" sınıfına ait olduğunu bilmenizdir. Buradaki sınıfı bir şablon veya fikir olarak düşünün.
Şimdi yaklaştıkça arabanın modelini ve markasını görüyorsunuz. Burada "araba" sınıfının "örneğini" tanıyorsunuz. Burada tüm özellikler ayrıntılı olarak sunulacak; tekerlekler, beygir gücü, jantlar vb.
Özelliklere bir örnek, "araba" sınıfının tüm arabaların tekerlekleri olması gerektiğini belirtmesi olabilir. Gördüğünüz arabanın (araba sınıfının bir örneği) alaşım jantları var.
Nesneye yönelik programlamada, sınıfı kendiniz tanımlarsınız ve sınıfın içinde "renk" türünde bir alan tanımlarsınız. Sınıf her oluşturulduğunda, bellek arka uçtaki renk için otomatik olarak ayrılır ve daha sonra buna belirli bir değer (örneğin kırmızı) verebilirsiniz. Bunun gibi öznitelikler belirli olduklarından statik değildirler.
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 genellikle kodunuza göre sabitlerdir (örneğin, yalnızca normal araba üretiyorsanız araba türü 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.
Sorun 1: Olmayan bir şeyi çağırıyorsunuz
Kullanıcıların hem statik hem de statik olmayan yöntemleri birbirleriyle kullandığı bazı durumlarla karşılaştık. Bunu yaptığımızda, hangi yöntemin neyi çağırdığına (durağan ya da değil) dikkat etmelisiniz. Aşağıdaki koda bir göz atın:
özel java.util.ListsomeMethod () {/ * Bazı Kodlar * / return someList; } public static void main (String [] strArgs) {// Aşağıdaki ifade hataya neden olur. Neden olduğunu biliyorsun .. java.util.List someList = birYöntem (); }
Burada statik yöntem someMethod'u çağırıyor. Nesne yönelimli programlamada, üzerinde işlem yapmak istediğimiz verilerle birlikte verileri sarmalıyoruz. Burada, bir nesne olmadan, örnek verisi yoktur ve örnek yöntemleri sınıf tanımının bir parçası olarak varken, bunlara veri sağlamak için her zaman bir nesne örneği olmalıdır.
Özetlemek gerekirse, var olmayan bir şeyi arayamazsınız. Bir nesne oluşturmamış olabileceğiniz için, statik olmayan yöntem henüz mevcut değildir. Bununla birlikte, diğer yandan, statik bir yöntem her zaman var olacaktır (tanım nedeniyle).
Sorun 2: Yöntemler Statik yapılmıyor
Yöntemlerin bir örneğini oluşturmadan Statik ana yönteminizden yöntemler çağırıyorsanız, bir hata mesajı alırsınız. Burada da aynı ilke geçerlidir; var olmayan bir şeye erişemezsiniz.
public class BookStoreApp2 {// seçenekler için sabitler Scanner input = new Scanner (System.in); public static void main (String [] değiştirgeler) {BookStoreItem [] öğe; // dizi öğesi bildirimi = new BookStoreItem [10]; // int itemType dizisi başlatılıyor = -1; printMenu (); getUserChoice (); for (int i = 0; iİşte bu kodda, her iki yöntemi de dönüştürmeniz gerekir. printMenu () ve getUserChoice () statik yöntemlere.
Dolayısıyla, böyle bir durumla başa çıkmak istiyorsanız, kurucu yerine. Örneğin, main () yönteminizin içeriğini alıp bir yapıcının içine yerleştirebilirsiniz.
public BookStoreApp2 () {// Ana yöntemin içeriğini buraya koyun} Bunu yaptıktan sonra, main () yönteminizin içinde aşağıdakileri yapın: public void main (String [] args) {new BookStoreApp2 (); }Bu ipuçları sizin veya kodunuz üzerinde işe yaramazsa, Statik sınıflarının ve yöntemlerinin temel ilkelerini aklınızda tutmalı ve temel ilkenin ihlal edilmediğinden emin olmak için kodunuzu yeniden kontrol etmelisiniz.