Static Variable

  • Antworten:7
  • OffenNicht stickyNicht beantwortet

01.04.2012 01:10:46

Hallo,

ich habe in einer Klasse einen Statischen Counter:

public static int counter;

Den Erhöhe ich jedesmal um wenn ein Objekt erstellt wird um 1.
Möchte ich allerdings außerhalb der Klasse den Counter abfragen, bekomme ich immer 0 zurück geliefert. Logge ich aber auf was der Counter erhöht wurde, sehe ich das dieser ganz normal durchzählt.

Wieso?

LG,
Daniel

01.04.2012 13:20:38

ok dann hier mal der Code:

Meine Klasse:
1public class Eieruhr {
2
3 private static String TAG = "Eieruhr";
4 private static boolean DEBUG = true;
5
6 public static int count = 0
7
8
9 public Eieruhr(Context ctx, int pos){
10 this.ctx = ctx;
11 count++;
12 position = pos;
13
14 if(DEBUG) Log.d(TAG,"Eieruhr erstellt. position="+position+". Count="+count);
15 }
16
17 public static int getCount(){
18 return count;
19 }

Die Abfrage aus einer anderen Klasse wie hier ergibt dann immer 0:
1if(DEBUG)Log.d(TAG,"COUNT= "+Eieruhr.count);


Ich habe jetzt nur den relevanten code kopiert.... ich verstehe einfach nicht wieso das nicht funktioniert. Ist ja eigentlich ziemlich simple...

01.04.2012 16:53:07

Was ist denn die andere Klasse?
Läuft die innerhalb desselben App Kontextes, oder ist es ein Service oder evtl. was ganz eigenständiges?

static Variablen gehören dem Classloader.
D.h. wenn du innerhalb eines Geräts zwei App Instanzen hast, die von unterschiedlichen Classloadern geladen wurden, haben die zwei unterschiedliche Exemplare der Variable.
Auch wenn die App aus dem Speicher geräumt wird (also auch die Klassen unloaded werden), wird der Wert zurückgesetzt.