it-swarm.com.de

Kann nicht statische Methoden statische Variablen ändern

Ich frage mich, wie eine nicht statische Methode eine statische Instanzvariable ändern kann. Ich weiß, dass statische Methoden nur auf andere statische Methoden und statische Variablen zugreifen können. Ist die andere Seite jedoch wahr? Können nicht statische Methoden nur auf nicht statische Variablen zugreifen? Zum Beispiel:

public class SampleClass {
  private static int currentCount = 0;

  public SampleClass() {
    currentCount++;
  }

  public void increaseCount() {
    currentCount++;
  }
}

Dieser Code wird kompiliert und ich würde gerne wissen, warum Privilegien für statischen Zugriff gelten.

23
Brian Vanover

Ich habe dies aus The Java Tutorials gefunden

  • Instanzmethoden können direkt auf Instanzvariablen und Instanzmethoden zugreifen.
  • Instanzmethoden können direkt auf Klassenvariablen und Klassenmethoden zugreifen.
  • Klassenmethoden können direkt auf Klassenvariablen und Klassenmethoden zugreifen.
  • Klassenmethoden können nicht direkt auf Instanzvariablen oder Instanzmethoden zugreifen. Sie müssen einen Objektverweis verwenden. Klassenmethoden können das Schlüsselwort this nicht verwenden, da es keine Instanz gibt, auf die sich dies bezieht.

Die Antwort ist also ja, nicht statische Methoden können statische Variablen modifizieren

35
Brian Vanover

Nein, jede nicht statische Methode hat Zugriff auf statische Member. Die einzige Möglichkeit, dies zu tun, wäre false, wenn der nicht statische Kontext keinen Zugriff auf das statische Member hat (z. B. das statische Member ist privat für eine Klasse und der nicht statische Code befindet sich nicht in dieser Klasse). Es sind statische Variablen vorhanden, um eine Instanz-freie Variable/Methode bereitzustellen. Wenn wir beispielsweise eine Game-Klasse und eine Highscore-Variable haben, wäre der Highscore statisch (ohne Instanz zugänglich) und nach jedem Spiel (eine Instanz der Game-Klasse). Abschließend könnten wir den Highscore von unserem nicht statischen Kontext abändern, wenn unser Score über dem Highscore liegt.

17
Robert Mitchell

Nicht statische Methoden können auf statische Variablen zugreifen . Statische Methoden können nur auf statische Variablen oder Methoden direkt zugreifen, ohne object.ex: public static void main (String arg []) zu erstellen.

5
vaishnavi

Statische Member sind keine Instanzmember, diese werden von der Klasse gemeinsam genutzt. Daher kann grundsätzlich jede Instanzmethode auf diese statischen Member zugreifen.

0
hellrocker

Ja, eine statische Methode kann auf eine nicht statische Variable zugreifen. Dazu erstellen Sie ein Objekt für die Klasse und greifen über das Objekt auf die Variable zu. Im folgenden Beispiel ist main eine statische Methode, die auf die Variable a zugreift, die nicht statisch ist.

demo-Code:

public class Sample {

   private int a;

   void method()
   {
       System.out.println("i am a private method");
   }

   public static void main(String[] args)
   { 
       Sample sample=new Sample();
       sample.a=10;
       System.out.println(sample.a);
   }
}   
0

Nicht statische Methoden können auf statische Variablen und statische Methoden zugreifen, wenn sie Mitglieder der Klasse sind.

Demo Code

public class Static_Class {
    protected static String str;
    private static int runningLoop;

    static{
        str = "Static Block";
    }

    /**
     * Non-Static Method Accessing Static Member  
     */
    public void modifyStaticMember(){
        str = "Non-Static Method";      
    }

    /**
     * Non-Static Method invoking Static Method
     */
    public void invokeStaticMethod(){
        String[] args = {};
        if(runningLoop == 0){
            runningLoop++;
            main(args); 
        }
        //Exiting as it will lead to Java.lang.StackOverflowError
        System.exit(0);
    }

    public static void main(String[] args) {
        Static_Class instance = new Static_Class();
        System.out.println(str);
        instance.modifyStaticMember();

        // Changed Value persists 
        System.out.println(str);

        //Invoking Static Method
        instance.invokeStaticMethod();

    }
}
0
Abhijeet

Schau es so an. Auf eine statische Variable kann auf verschiedene Arten zugegriffen werden. Eine der häufigsten ist, dem Variablennamen den Klassennamen voranzustellen, da statische Variablen pro Klasse angegeben werden. Da Sie sich auf diese Variable in derselben Klasse beziehen, müssen Sie nicht mit dem Klassennamen beginnen. Es ist egal, wo Sie die statische Variable aufrufen. Auch dies ist eine private statische Variable, auf die keine andere Klasse zugreifen kann.

0
happybuddha

Statische Variablen sind Klassenvariablen, keine Instanz- oder lokale Variablen. Deshalb können wir statische Variablen auch in nicht statischer Methode verwenden. und statische Variablen sind nicht pro Objekt. statische Variablen haben eine Kopie, die im gesamten Programm verwendet wird.

0
Abhishek

Statische Methoden können nicht-statische Felder nicht ändern, da - Für die Verwendung eines nicht statischen Feldes (außerhalb der Klasse) ein Klassenobjekt .__ instanziiert werden muss. Für die Verwendung einer statischen Methode ist jedoch keine Objekt-Instantiierung erforderlich. Aus diesem Grund ist es für eine nicht statische Methode (die keine Objekt-Instantiierung erfordert) nicht sinnvoll, Ein Feld zu ändern, das instanziiert werden soll.

Zu diesem Zweck können statische Methoden nur statische Felder berühren (oder andere statische Methoden aufrufen).

Wie Sie jedoch bereits erwähnt haben, ist es möglich, Eine nicht statische Methode kann ein statisches Feld ändern, das für alle Objekte seiner Klasse statisch ist.

0
Mercury