Zähler im Konstructor

melmager

Erfahrenes Mitglied
Gibt es irgendwie eine Möglichkeit in einer Mehode einen Zähler einzubauen
um zu ermitteln wie oft eine Instanz dieser Classe erstellt wurde ?

Ztest a = new Ztest();
Ztest b = new Ztest();

a.counter sollte dann 1 sein und
b.counter 2
 
Hallo,

sowas lässt sich leicht mit einer Klassenvariable lösen:
Code:
public class Ztest {
    private static int counter = 0;
    private int count;
    
    public Ztest() {
        counter++;
        this.count = counter;
    }
    
    public int getCount() {
        return count;
    }
    
    public static void main(String[] args) {
        Ztest a = new Ztest();
        Ztest b = new Ztest();
        
        System.out.println("a.count= " + a.getCount());
        System.out.println("b.count= " + b.getCount());
    }
}

Gruß
Vincent
 
Wie oft eine Instanz erstellt wurde (lt. Fragestellung) wäre so:

Code:
public static int getCount() {
return counter;
}
;-)

P.S.: Die Instanz-Variable "count" wird dann nicht gebraucht, denn a.getCount() oder b.getCount() würden dann stets die korrekte Anzahl erstellter Instanzen liefern.
 
Zuletzt bearbeitet:
Gibt es Nachteile gegenüber Eurer Version, wenn ich die einzelnen Instanzen in Vectoren aufnehme, das ermöglicht doch einen besseren Zugriff und ich kann gegebenfalls eine Umsortierung vornehmen etc.

Ich frage, weil ich gerade ein ähnliches Problem habe und versuche es auf diese Art zu lösen.
 
Moin,
der Unterschied ist der, dass bei der static Benutzung keine Instanz/Referenz notwendig ist. Einfach Ztest.getCount(), fertig. Du musst schauen, wo Du überall die Objekte benötigst. Bevor Du unzählige Referenzen mit Dir herumschleppst, ist es u.U. einfacher, die einzelnen Instanzen in einen static Vector der Klasse Ztest zu legen, und den von überall her z.B. mit Ztest.getInstances() zu holen.
 
Ja Danke, bin also doch nicht ganz auf dem Holzweg. Ist Vector eigentlich der geeignetste Typ für derartige Sachen oder sollte ich besser mit Listen oder Arrays arbeiten?
 
Auch das musst Du für Dich selbst entscheiden. Vector ist eine Liste und im Gegensatz zu einer ArrayList ist sie threadsicher. Arrays sollen schneller sein, sind aber nicht dynamisch, d.h. es muss von vornherein klar sein, wie viele Elemente darin aufgenommen werden. Einer Liste können immer wieder nach und nach weitere Objekte hinzugefügt werden. Womit wir schon beim Thema sind: Listen können keine Primitivtypen aufnehmen, höchstens via Wrapper-Klassen. Arrays können das hingegen ohne Wrapper.
 
Hi,

eine Frage dazu.
Wie kann ich bei der obigen Funktion (ich habe ein ähnliches Problem),
die Namen der Objekte ausgeben lassen.

Beispiel
Erstellen einer Videodatenbanksammlung (Aufgabe aus der Schule)

Klassen: Film und Kasette (eine Kasette kann fünf Filme enthalten)
Beides erhalte ich natürlich nur während das Programm bereits läuft.

Wie kann ich nun die Namen der erstellen Kasetten herausfinden und wie kann die Attribute einer solchen Kasette ausgeben?

Wenn ich den Namen wüßte, wäre dies ja kasette1.ausgabe();
Den Namen weiß ich aber ja nicht ...

Hat jemand einen Rat? Wäre sehr nett ...


Danke im Voraus.

Gruss
Nils
.
 
Also ich meine das geht so, indem Du einen statischen Vector anlegst und im Konstruktor jeweils this in den Vector legst. Mit einer statischen Methode
public static List getCassettes()
{
return myStaticVector;
}
bekommst Du dann den Vector mit allen Instanzen der Cassette-Klasse.

Ist es das was Du suchst?
 
Zurück