Fix: Nicht statische Methode Kann nicht aus einem statischen Kontext referenziert werden

Viele Programmierer sehen sich mit der Fehlermeldung ‘Nicht statische Methoden können nicht aus einem statischen Kontext referenziert werden‘wenn sie codieren. Diese Fehlermeldung ist nicht spezifisch und kann in jeder IDE auftreten, wenn die Bedingungen für den Fehler erfüllt sind.

Nicht statische Methode Kann nicht aus einem statischen Kontext referenziert werden

Dies ist ein sehr häufiger Fehler für Anfänger, bei denen der Programmierer versucht, eine Klasse “statisch” zu verwenden, ohne eine Instanz der Klasse zu erstellen. Es gibt mehrere Bedingungen, die erfüllt sein müssen, wenn Sie eine statische Klasse verwenden. In diesem Artikel werden wir verschiedene Fälle durchgehen und Ihnen zeigen, wie Sie eine statische Klasse verwenden.

Was ist eine statische Methode?

Durch Hinzufügen des Schlüsselworts ‘static’ zu einer Methode wird die Methode als statische Methode bezeichnet. Eine statische Methode gehört eher zur Klasse als zu einem Objekt (was die Norm ist). Eine statische Methode kann einfach aufgerufen werden, ohne dass eine Instanz einer Klasse erstellt werden muss.

Es gibt verschiedene Verwendungsmöglichkeiten für statische Methoden. Mit dieser Methode können Sie beispielsweise ein statisches Datenelement und seinen Wert ändern. Bei Verwendung einer statischen Methode gibt es jedoch noch einige Einschränkungen. Wenn Sie beispielsweise auf nicht statische Felder Ihrer Klasse zugreifen möchten, müssen Sie eine nicht statische Methode verwenden. Zusammenfassend lässt sich sagen, dass statische Methoden sehr sparsam eingesetzt werden, aber sie haben ihre Vorteile.

Hier ist ein kurzes Beispiel, wie eine statische Methode zum Ändern der Eigenschaft aller Objekte erstellt werden kann.

class Students{ 

 int roll_no; 

 String name; 

 static String college = "InformationTech"; 

 static void change(){ 

 college = “Management"; } 

 Students (int number, 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(); 

Students stu_1 = new Students (100,"Mexican"); 

Students stu_2 = new Students (202,"American"); 

Students stu_3 = new Students (309,"British"); 

stu_1.display(); 

stu_2.display(); 

stu_3.display(); 

}  }

Die Ausgabe des Programms lautet:

100 Mexican Management 202 American Management 309 British Management

Was ist der Unterschied zwischen einer Klasse und einer Instanz einer Klasse?

Denken Sie, Sie gehen auf der Straße und sehen ein Auto. Jetzt wissen Sie sofort, dass dies ein Auto ist, auch wenn Sie nicht wissen, welches Modell oder welcher Typ es ist. Dies liegt daran, dass Sie wissen, dass dies zu der Klasse von “Autos” gehört, die Sie bereits kennen. Stellen Sie sich den Unterricht hier als Vorlage oder Idee vor.

Wenn Sie näher kommen, sehen Sie das Modell und die Marke des Autos. Hier erkennen Sie die ‘Instanz’ der Klasse ‘Auto’. Hier werden alle Eigenschaften im Detail vorhanden sein; die Räder, die Leistung, die Felgen usw.

Ein Beispiel für Eigenschaften kann sein, dass die Klasse “Auto” angibt, dass alle Autos Räder haben sollten. Das Auto, das Sie sehen (ein Beispiel der Fahrzeugklasse), hat Leichtmetallfelgen.

In der objektorientierten Programmierung definieren Sie die Klasse selbst und innerhalb der Klasse definieren Sie ein Feld vom Typ ‘Farbe’. Immer wenn die Klasse instanziiert wird, wird der Speicher automatisch für die Farbe im Backend reserviert. Später können Sie diesem einen bestimmten Wert zuweisen (z. B. Rot). Da solche Attribute spezifisch sind, sind sie nicht statisch.

Im Gegensatz dazu werden statische Methoden und Felder mit allen Instanzen gemeinsam genutzt. Diese werden für Werte oder Elemente erstellt, die für die Klasse und nicht für die Instanz selbst spezifisch sind. Für Methoden kann es globale Methoden geben (z. B. stringtoInt-Konverter), und für Felder sind sie normalerweise Konstanten gemäß Ihrem Code (z. B. kann der Fahrzeugtyp statisch sein, wenn Sie nur normale Fahrzeuge herstellen).

Jetzt werden wir uns die verschiedenen Fälle ansehen, in denen Ihre Codierung schief gehen kann, und die Problemumgehungen sehen, um sie zu beheben.

Problem 1: Sie rufen etwas auf, das nicht existiert

Wir sind auf einige Fälle gestoßen, in denen Benutzer sowohl statische als auch nicht statische Methoden miteinander verwendeten. Wenn wir dies tun, sollten Sie darauf achten, welche Methode was aufruft (statisch oder nicht). Sehen Sie sich den folgenden Code an:

private java.util.List<String> someMethod(){

    /* Some Code */

    return someList;           }

public static void main(String[] strArgs){         

     // The following statement causes the error. You know why..

    java.util.List<String> someList = someMethod();        }

Hier ruft die statische Methode someMethod auf. Bei der objektorientierten Programmierung kapseln wir die Daten zusammen mit den Daten, mit denen wir arbeiten möchten. Hier gibt es ohne Objekt keine Instanzdaten, und während die Instanzmethoden als Teil der Klassendefinition vorhanden sind, sollte immer eine Objektinstanz vorhanden sein, um ihnen Daten bereitzustellen.

Zusammenfassend kann man also nichts nennen, was nicht existiert. Da Sie möglicherweise kein Objekt erstellt haben, ist die nicht statische Methode noch nicht vorhanden. Andererseits wird es immer eine statische Methode geben (aufgrund der Definition).

Problem 2: Methoden werden nicht statisch gemacht

Wenn Sie Methoden von Ihrer statischen Hauptmethode aus aufrufen, ohne eine Instanz der Methoden zu erstellen, wird eine Fehlermeldung angezeigt. Hier gilt das gleiche Prinzip; Sie können nicht auf etwas zugreifen, das nicht existiert.

public class BookStoreApp2 {

    //constants for options

    Scanner input = new Scanner (System.in);

    public static void main(String[] args) {

        BookStoreItem[] item;//declaring array

        item = new BookStoreItem[10];//initializing array

        int itemType = -1;

        printMenu();

        getUserChoice();

        for (int i = 0; i < item.length; i++){

            }//end of switch statement

        }//end of for loop

        for (int i = 0; i < item.length; i++) {

        }//end of for

    }//end of main method

Hier in diesem Code müssen Sie beide Methoden konvertieren printMenu () und getUserChoice () in statische Methoden.

Wenn Sie also eine Situation wie diese umgehen möchten, können Sie a verwenden Konstrukteur stattdessen. Sie können beispielsweise den Inhalt Ihrer main () -Methode in einen Konstruktor einfügen.

public BookStoreApp2()

{
   // Put contents of main method here}
After doing this, do the following inside your main() method:

public void main( String[] args )

{ 
new BookStoreApp2();           }

Wenn diese Tipps bei Ihrem oder Ihrem Code nicht funktionieren, sollten Sie die Grundprinzipien der statischen Klassen und Methoden berücksichtigen und Ihren Code erneut überprüfen, um sicherzustellen, dass das Grundprinzip nicht verletzt wird.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *