Unterschied zwischen statischen Methoden und Instanzmethoden

Ich habe gerade den Text gelesen, der mir in meinem Lehrbuch gegeben wurde, und ich bin mir nicht sicher, ob ich verstehe, was er sagt. Es sagt mir im Grunde, dass statische Methoden oder classnmethoden das Schlüsselwort “Modifier” Static enthalten. Aber ich weiß nicht wirklich was das bedeutet?

Könnte mir bitte jemand in einfachen Worten erklären, was statische oder classnmethoden sind?

Könnte ich auch eine einfache Erklärung zu den Methoden von Instanzen erhalten?

Das geben sie mir im Lehrbuch:

Es gibt wichtige praktische Auswirkungen der Anwesenheit oder Abwesenheit des statischen Modifikators. Eine öffentliche classnmethode kann aufgerufen und ausgeführt werden, sobald Java die Definition der class verarbeitet, zu der sie gehört. Dies ist bei einer Instanzmethode nicht der Fall. Bevor eine öffentliche Instanzmethode aufgerufen und ausgeführt werden kann, muss eine Instanz der class erstellt werden, zu der sie gehört. Um eine öffentliche classnmethode zu verwenden, benötigen Sie nur die class. Bevor Sie jedoch eine öffentliche Instanzmethode verwenden können, müssen Sie eine Instanz der class haben.

Die Art und Weise, in der eine statische Methode innerhalb der Definition einer anderen Methode aufgerufen wird, hängt davon ab, ob die beiden Methoden zu derselben class gehören oder nicht. Im obigen Beispiel sind factional und main beide Methoden der MainClass-class. Daher bezieht sich der Aufruf von faktorial in der Definition von main einfach auf den Methodennamen “faktoriell”.

Das grundlegende Paradigma in Java besteht darin, dass Sie classn schreiben und dass diese classn instanziiert werden. Instanziierte Objekte (eine Instanz einer class) haben Attribute, die ihnen zugeordnet sind (Elementvariablen), die ihr Verhalten beeinflussen; Wenn die Methode der Instanz ausgeführt wird, bezieht sie sich auf diese Variablen.

Alle Objekte eines bestimmten Typs können jedoch ein Verhalten aufweisen, das überhaupt nicht von Elementvariablen abhängig ist. Diese Methoden werden am besten statisch gemacht. Da sie statisch ist, ist keine Instanz der class erforderlich, um die Methode auszuführen.

Sie können dies tun, um eine statische Methode auszuführen:

MyObject.staticMethod();//Simply refers to the class's static code 

Um eine nicht statische Methode auszuführen, müssen Sie Folgendes tun:

 MyObject obj = new MyObject();//Create an instance obj.nonstaticMethod();//Refer to the instance's class's code 

Auf einer tieferen Ebene, wenn der Compiler eine class zusammenfügt, enthält es mehrere pointers auf Methoden. Wenn diese Methoden ausgeführt werden, folgen sie den pointersn und führen den Code am fernen Ende aus. Wenn eine class instanziiert wird, enthält das erstellte Objekt einen pointers auf die “virtuelle Methodentabelle”, die auf die Methoden verweist, die für diese bestimmte class in der inheritanceshierarchie aufgerufen werden sollen. Wenn die Methode jedoch statisch ist, wird keine “virtuelle Methodentabelle” benötigt: Alle Aufrufe dieser Methode werden an dieselbe Stelle im Speicher geleitet, um den exakt gleichen Code auszuführen. Aus diesem Grund ist es in Hochleistungssystemen besser, eine statische Methode zu verwenden, wenn Sie nicht auf Instanzvariablen angewiesen sind.

Methoden und Variablen, die nicht als statisch deklariert sind, werden als Instanzmethoden und Instanzvariablen bezeichnet. Um auf Instanzmethoden und -variablen verweisen zu können, müssen Sie zuerst die class instanziieren. Dies bedeutet, dass Sie zuerst ein Objekt dieser class erstellen müssen. Bei statischen classn müssen Sie die class nicht instanziieren, um mit dem classnnamen auf die Methoden und Variablen zugreifen zu können welches ist in (.)

beispielsweise:

 Person.staticMethod(); //accessing static method. 

Bei nicht statischen Methoden müssen Sie die class instanziieren.

 Person person1 = new Person(); //instantiating person1.nonStaticMethod(); //accessing non-static method. 

Statische Methoden, Variablen gehören zu der gesamten class, nicht nur zu einer Objektinstanz. Eine statische Methode, Variable, ist der class als Ganzes und nicht bestimmten Instanzen einer class zugeordnet. Jedes Objekt teilt eine gemeinsame Kopie der statischen Methoden, Variablen. Es gibt nur eine Kopie pro class, egal wie viele Objekte daraus erstellt werden.

Instanzmethoden => wird für eine bestimmte Instanz einer bestimmten class aufgerufen. Die Methode möchte wissen, auf welcher class sie aufgerufen wurde. Die Art und Weise, wie es passiert, ist ein unsichtbarer Parameter namens ‘dies’. Innerhalb von ‘this’ haben wir Mitglieder der Instanzklasse bereits mit Werten versehen. ‘Dies’ ist keine Variable. Es ist ein Wert, den Sie nicht ändern können, und der Wert ist ein Verweis auf den Empfänger des Anrufs. Bsp .: Sie rufen Repairmen (Instanzmethode) auf, um Ihren Fernseher zu reparieren (aktuelles Programm). Er kommt mit Werkzeugen (‘dieser’ Parameter). Er kommt mit speziellen Werkzeugen, die für die Befestigung des Fernsehers benötigt werden, und er kann auch andere Dinge reparieren.

In statischen Methoden => gibt es kein ‘This’. Bsp .: Derselbe Mechaniker (statische Methode). Wenn Sie ihn anrufen, müssen Sie angeben, welcher Techniker angerufen werden soll (wie ein Elektriker). Und er wird kommen und nur deinen Fernseher reparieren. Aber er hat keine Werkzeuge, um andere Dinge zu reparieren (es gibt keinen ‘diesen’ Parameter).

Statische Methoden sind normalerweise für Operationen nützlich, die keine Daten von einer Instanz der class (von ‘this’) benötigen und ihren beabsichtigten Zweck nur mit ihren Argumenten erfüllen können.

Unterschied zwischen statischen Methoden und Instanzmethoden

  1. Instanzmethode sind Methoden, bei denen ein Objekt seiner class erstellt werden muss, bevor es aufgerufen werden kann. Statische Methoden sind die Methoden in Java, die aufgerufen werden können, ohne ein Objekt der class zu erstellen.

  2. Die statische Methode wird mit einem statischen Schlüsselwort deklariert. Instanzmethode ist nicht mit einem statischen Schlüsselwort.

  3. Statische Methode bedeutet, dass sie als einzelne Kopie für eine class existiert. Aber Instanzmethoden existieren als mehrere Kopien, abhängig von der Anzahl der Instanzen, die für diese class erstellt wurden.

  4. Statische Methoden können mithilfe der classnreferenz aufgerufen werden. Instanz- oder nicht statische Methoden werden mithilfe der Objektreferenz aufgerufen.

  5. Statische Methoden können nicht direkt auf Instanzmethoden und Instanzvariablen zugreifen. Die Instanzmethode kann direkt auf statische Variablen und statische Methoden zugreifen.

Referenz: Geeksforgeeks

Wenn der Zustand einer Methode nicht geändert werden soll oder keine Instanzvariablen verwendet werden sollen.

Sie möchten die Methode ohne Instanz aufrufen.

Wenn es nur für Argumente funktioniert, die ihm zur Verfügung gestellt werden.

Dienstprogrammfunktionen sind eine gute Instanz von statischen Methoden. dh math.pow (), diese function wird den Zustand für verschiedene Werte nicht ändern. Es ist also statisch.

Das Verhalten eines Objekts hängt von den Variablen und Methoden dieser class ab. Wenn wir eine class erstellen, erstellen wir ein Objekt dafür. Für statische Methoden benötigen wir sie nicht als statische Methoden, dh alle Objekte haben die gleiche Kopie, so dass kein Objekt benötigt wird. z.B:

 Myclass.get(); 

In der Instanzmethode hat jedes Objekt ein anderes Verhalten, so dass sie die Methode mit der Objektinstanz aufrufen müssen. z.B:

 Myclass x = new Myclass(); x.get(); 

Der statische Modifikator, wenn er vor einer function platziert wird, impliziert, dass nur eine Kopie dieser function existiert. Wenn der statische Modifikator nicht vor der function platziert wird, wird mit jedem Objekt oder jeder Instanz dieser class eine neue Kopie dieser function erstellt. 🙂 Das gleiche gilt für Variablen.

Kurz gesagt, statische Methoden und statische Variablen sind classnebenen, wobei Instanz- und Instanzvariablen Instanzen- oder Objektebene sind.

Dies bedeutet, dass jedes Mal, wenn eine Instanz oder ein Objekt (unter Verwendung von new ClassName ()) erstellt wird, dieses Objekt seine eigene Kopie von Instace-Variablen behält. Wenn Sie fünf verschiedene Objekte derselben class haben, haben Sie fünf verschiedene Kopien der Instanzvariablen. Aber die statischen Variablen und Methoden sind für alle diese fünf Objekte gleich. Wenn Sie etwas benötigen, das von jedem erstellten Objekt verwendet wird, machen Sie es statisch. Wenn Sie eine Methode benötigen, die keine objektspezifischen Daten benötigt, müssen Sie sie statisch machen. Die statische Methode funktioniert nur mit einer statischen Variablen oder gibt Daten auf der Basis übergebener Argumente zurück.

 class A { int a; int b; public void setParameters(int a, int b){ this.a = a; this.b = b; } public int add(){ return this.a + this.b; } public static returnSum(int s1, int s2){ return (s1 + s2); } } 

Im obigen Beispiel, wenn Sie add () wie folgt aufrufen:

 A objA = new A(); objA.setParameters(1,2); //since it is instance method, call it using object objA.add(); // returns 3 B objB = new B(); objB.setParameters(3,2); objB.add(); // returns 5 //calling static method // since it is a class level method, you can call it using class itself A.returnSum(4,6); //returns 10 class B{ int s=8; int t = 8; public addition(int s,int t){ A.returnSum(s,t);//returns 16 } } 

In der ersten class gibt add () die Summe der von einem bestimmten Objekt übergebenen Daten zurück. Aber die statische Methode kann verwendet werden, um die Summe von jeder class unabhängig von einer bestimmten Instanz oder einem bestimmten Objekt zu erhalten. Daher können für generische Methoden, die nur Argumente für die Arbeit benötigen, statische Einstellungen vorgenommen werden, um alles DRY zu erhalten.

Instanzmethode vs statische Methode

  1. Die Instanzmethode kann direkt auf die Instanzmethoden und Instanzvariablen zugreifen.

  2. Die Instanzmethode kann direkt auf statische Variablen und statische Methoden zugreifen.

  3. Statische Methoden können direkt auf die statischen Variablen und statischen Methoden zugreifen.

  4. Statische Methoden können nicht direkt auf Instanzmethoden und Instanzvariablen zugreifen. Sie müssen Referenz auf das Objekt verwenden. Und die statische Methode kann dieses Schlüsselwort nicht verwenden, da es für “dieses” keine Instanz gibt.