Heim > Java > JavaBase > Der Unterschied zwischen statischen Java-Methoden und nicht statischen Methoden

Der Unterschied zwischen statischen Java-Methoden und nicht statischen Methoden

angryTom
Freigeben: 2019-11-12 10:24:38
Original
5880 Leute haben es durchsucht

Der Unterschied zwischen statischen Java-Methoden und nicht statischen Methoden

Der Unterschied zwischen statischen Java-Methoden und nicht statischen Methoden

1 Methode)

Sie gehören wie statische Mitgliedsvariablen zur Klasse selbst. Sie werden in den Speicher geladen, wenn die Klasse geladen wird, und werden nicht automatisch zerstört. Sie bleiben im Speicher, bis die JVM geladen wird geschlossen;

2. Nicht-statische Methode

Wird auch als Instanziierungsmethode bezeichnet und muss nach der Instanziierung zugewiesen werden Instanz der Klasse. Wenn das Instanzobjekt von der JVM recycelt wird, verschwindet es auch

Der Unterschied zwischen statischen Methoden und Instanzmethoden

1. Leben Zyklus

Der Lebenszyklus einer statischen Methode beginnt, wenn der Prozess erstellt wird, und endet, wenn der Prozess endet. Daher ist die statische Methode global und durchläuft den gesamten Prozess Der Lebenszyklus der Instanzmethode beginnt mit der Instanziierung des Objekts und dauert bis zum Ende des Prozesses. Das instanziierte Objekt endet nach der Aufhebung der Registrierung und dem Recycling

Der Lebenszyklus der Instanzmethode ist also kürzer als der Lebenszyklus der statischen Methode Dies ist auch der Grund, warum statische Methoden nicht in Instanzmethoden aufgerufen werden können

2 .Aufrufende Methode

Beim externen Aufruf einer statischen Methode Sie können die Methode „Klassenname. Methodenname“ oder die Methode „Objekt. Methodenname“ verwenden, was bedeutet, dass beim Aufruf einer statischen Methode kein Objekt erstellt werden muss

Instanzmethoden können nur die verwenden „object.method name method“

//-----------hasStaticMethod.java-----------------
public class hasStaticMethod{
//定义一个静态方法
public static void callMe(){
  System.out.println("This is a static method.");
}
}
Nach dem Login kopieren

Das folgende Programm verwendet zwei Formen, um statische Methoden aufzurufen.

//-----------invokeStaticMethod.java-----------------
public class invokeStaticMethod{
  public static void main(String args[]){
  hasStaticMethod.callMe(); //不创建对象,直接调用静态方法 
  hasStaticMethod oa = new hasStaticMethod();  //创建一个对象
  oa.callMe();   //利用对象来调用静态方法
}
}
Nach dem Login kopieren

3. Zugriffsbeschränkungen

Wenn statische Methoden auf Mitglieder dieser Klasse zugreifen, dürfen sie nur auf statische Mitglieder (d. h. statische Variablen und statische Methoden) zugreifen und nicht Greifen Sie auf Instanzmitgliedsvariablen und Instanzmethoden zu. Für Instanzmethoden gilt diese Einschränkung nicht.

Instanzmitgliedsvariablen gehören zu einem Objekt, und das Objekt existiert nicht unbedingt, wenn die statische Methode zulässig ist Die Methode greift auf die Instanzmitgliedsmethode zu und kann daher indirekt auf die Instanzmitgliedsvariable zugreifen. Aus demselben Grund kann das Schlüsselwort this

//-----------accessMember.java-----------------
class accessMember{
private static int sa; //定义一个静态成员变量
private int ia; //定义一个实例成员变量
//下面定义一个静态方法
static void statMethod(){
  int i = 0;  //正确,可以有自己的局部变量sa = 10;  
  //正确,静态方法可以使用静态变量
  otherStat(); 
  //正确,可以调用静态方法
  ia = 20;  //错误,不能使用实例变量
  insMethod(); //错误,不能调用实例方法
}
static void otherStat(){} 
//下面定义一个实例方法 
void insMethod(){
  int i = 0;  //正确,可以有自己的局部变量
  sa = 15;  //正确,可以使用静态变量
  ia = 30;  //正确,可以使用实例变量
  statMethod();  //正确,可以调用静态方法
}
}
Nach dem Login kopieren

nicht verwendet werden statische Methode 4. Ausführungssequenz

Wenn eine Klassendatei von ClassLoader in die JVM geladen wird, werden die Methodenanweisungen im Stapel gespeichert. Zu diesem Zeitpunkt befinden sich keine Daten im Heap-Bereich. Wenn es sich um eine statische Methode handelt, kann der Befehlscode zu diesem Zeitpunkt natürlich nicht auf den Heapshuju-Datenbereich zugreifen Die Instanzmethode verfügt über einen impliziten eingehenden Parameter, den Parameter. Dieser Parameter ist die Speicheradresse des Instanzobjekts im Stapel, sodass die Instanzmethode ihre eigenen Daten im Heap finden kann vor dem Aufruf instanziiert werden, Daten im Heap zuweisen und den Speicherzeiger im Stapel über die impliziten Parameter der JVM an die Instanzmethode übergeben. Wenn Sie es direkt aufrufen, ohne es zu instanziieren, wird ein Fehler gemeldet, da der implizite Parameter keinen Wert hat.

Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen statischen Java-Methoden und nicht statischen Methoden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage