Frage zu static Objekten



  • Ich bin verwirrt.
    Folgende Klasse:

    public class A {
    
    int counter
    
    public void count_up() {
       counter++;
    }
    
    public void count_down() {
       counter--;
    }
    
    }
    
    public class B {
     public B() {
    
     static A a = new A();
    }
    
    }
    
    public class C {
     public C() {
    for( int i = 0 ; i < 10 ; ++i) 
          B b = new B();
    }
    

    Wieviele A Objekte habe ich nun ? 10 oder 1 , da das Objekt ja static ist.

    ps: Ich habe diesen Code nicht getestet.



  • > ps: Ich habe diesen Code nicht getestet.
    warum probierst du ihn dann nich aus 😕
    du hast 1 A objekt ⚠



  • kannst du das bitte näher erläutern, warum nur 1 mal A gibt ?

    weil meiner meinung holt er sich 10 instanzen von B und jedes B holt sich eine instanz von A, setzt dabei aber den bezeicher (klein) a static mehr nicht.

    wenn du nur eine instanz von A haben möchtest müsstest du die Klasse A static deklarieren und einen statischen Ctor bauen der auf eine vorhandene Instanz von A prüft und diese ggf. zurückliefert .... oder so ähnlich

    ich bin mir nur nicht wirklich sicher, falls n denkfehler bei iss bitte sagen



  • Abgesehen davon, dass dieser Code nie kompilieren wird (das "static a" sollte wohl nicht im Konstruktor stehen) ... Das "static" bindet "a" an die Klasse "B", ohne "static" wäre es an ein Objekt von "B" gebunden. Das "= new A()" wird dann ausgeführt, wenn die Klasse "B" geladen wird. Im Normalfall geschieht sowas nur einmal, deshalb gibt es im aktuellen Beispiel auch nur eine Instanz von "A".

    Später kann man "a" so oft abändern wie man will.

    "Statische Klassen" gibt es zwar, aber das müssen dann innere Klassen sein. Hier besagt das "static" dann nur, dass die innere Klasse auch instanziiert werden kann, wenn es keine Instanz der äusseren Klasse gibt.



  • ah vielen dank!!!

    das klärt ein wahnsinniges missverständniss meinerseits auf!!!

    danke nochmal für die erleuchtung ^^

    kann es sein das ich zufällig static mit final verwechselt hab ??



  • Naja, "final" benutzt man um Konstanten zu erzeugen, seien das "konstante Variablen" (was für ein Konstrukt...), Methoden die nicht überschrieben werden können, oder Klassen von denen nicht geerbt werden kann. Das passt irgendwie auch nicht richtig zu deinen Aussagen :p



  • Vielen dank, jetzt versteh ich.



  • Hm sorry?
    Aber nur weill EinM mit java angefangen hat müst ihr nicht auf anfagnen in der SUXX sprache zu coden!


Anmelden zum Antworten