Michi: Static-Fragen zu Java

Hallo Forum,

ich lerne zurzeit für unsere Java-Klausuren und hätte leider doch ein paar Fragen, in der ich durch die Scripte nicht schlau wurde.

public class Klasse1 {
   public int instanzvar=1;
   public int variable_eins;
   public int variable_zwei;
   public static int etwas_statisches=100;

public Klasse (int var) {
    variable_eins=var;
    variable=eins=etwas_statisches;
    etwas_statisches++;
   }

}

1. Ich habe nun in einem Script gesehen, wo eine Insatzvariable in einer anderen Klasse direkt aufgerufen werden konnte. In etwa wie:

public static void main (String[] args {
     if(Klasse.instanzvar==1) System.out.println("1");
   }

Kann man ohne weiteres auf eine Instanzvariable (Egal, ob String, int) in einer anderen Klasse direkt zugreifen, wenn diese public ist? (Könnte man den Inhalt auch ändern?)

2. Was mich auch etwas verwundert hat, dasses statische Instanzvariablen gibt. Sobald man in einer andere Klasse mehrere Objekte vom Typ "Klasse1) bilded, gehört die statische Instanzvariable praktisch nicht als Instanz zum Objekt ne?
Irgendwo (nicht in dem Objekt, wo ich erzeuge) wird dann der Inhalt von "etwas_statisches" wohl gespeichert, so dass ich beim erzeugen eines zweites Objektes, auf den neuen Wert von "etwas_statisches" zugreifen kann.

3. Thread.yield() hat mich etwas verschickt. Schaue mir dies aber nochmals genau an oder suche ein gutes und verständliches Beispiel dazu.

Ich hoffe, dass es dies war. Hab das Script eigentlich durch und dürften keine anderen fragen mehr auftauchen ;)

Grüße

  1. Hello,

    Kann man ohne weiteres auf eine Instanzvariable (Egal, ob String, int) in einer anderen Klasse direkt zugreifen, wenn diese public ist? (Könnte man den Inhalt auch ändern?)

    ja, kann man. Es ist allerdings wohl eher die unfeine Art, bevorzugt würde man die Variable private deklarieren und entsprechende getter und setter-Methoden anbieten.

    1. Was mich auch etwas verwundert hat, dasses statische Instanzvariablen gibt. Sobald man in einer andere Klasse mehrere Objekte vom Typ "Klasse1) bilded, gehört die statische Instanzvariable praktisch nicht als Instanz zum Objekt ne?

    genau, statische Variablen sind an die Klasse gebunden, nicht an das Objekt. Sie sind über alle Instanzen hinweg einheitlich, d.h. wenn du den Wert einer statischen Variablen änderst, dann gilt dies für alle Zugriffe, egal von wo. Es ist daher auch unüblich zu schreiben meinObjekt.instanzvariable - stattdessen verwendet man eben meineKlasse.instanzvariable.

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    Vegetarier essen meinem Essen das Essen weg.
    1. Hi,

      Kann man ohne weiteres auf eine Instanzvariable (Egal, ob String, int) in einer anderen Klasse direkt zugreifen, wenn diese public ist? (Könnte man den Inhalt auch ändern?)
      ja, kann man. Es ist allerdings wohl eher die unfeine Art, bevorzugt würde man die Variable private deklarieren und entsprechende getter und setter-Methoden anbieten.

      Wie würde das in etwa aussehen, wenn ich auf eine public-instanzvariable direkt zugreife bzw. ihn ändern will?

      1. Was mich auch etwas verwundert hat, dasses statische Instanzvariablen gibt. Sobald man in einer andere Klasse mehrere Objekte vom Typ "Klasse1) bilded, gehört die statische Instanzvariable praktisch nicht als Instanz zum Objekt ne?
        genau, statische Variablen sind an die Klasse gebunden, nicht an das Objekt. Sie sind über alle Instanzen hinweg einheitlich, d.h. wenn du den Wert einer statischen Variablen änderst, dann gilt dies für alle Zugriffe, egal von wo. Es ist daher auch unüblich zu schreiben meinObjekt.instanzvariable - stattdessen verwendet man eben meineKlasse.instanzvariable.

      vielen dank, dass muss ich mir mal verinnerlichen bzw. ein Beispiel machen.

      Grüße

      1. Hello,

        Wie würde das in etwa aussehen, wenn ich auf eine public-instanzvariable direkt zugreife bzw. ihn ändern will?

          
        public class MyStaticClass {  
          
           // wichtig: darf nicht "final" deklariert sein, sonst ist Änderung nicht möglich  
           public static myCounter = 0;  
          
        }  
          
        public class MyMainClass {  
          
           public static void main(String[] args) {  
              for (int i = 0; i < 100; i++) {  
                 // erhöhe den Counter um 1  
                 MyStaticClass.myCounter++;  
              }  
          
              // gib den Counter aus  
              System.out.println(MyStaticClass.myCounter);  
           }  
          
        }  
        
        

        MfG
        Rouven

        --
        -------------------
        sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
        Friendships are like back yard gardens. We always mean to tend to them, we just seem to put to put them off until next week.  --  Christian Clemenson as Jerry Espenson in Boston Legal: "Patriot Acts"