Static Variable

  • Antworten:7
Daniel online
  • Forum-Beiträge: 282

01.04.2012, 01:10:46 via Website

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

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

01.04.2012, 12:15:54 via Website

Zeig mal wie du das machst ;)

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Ansgar M

Antworten
Daniel online
  • Forum-Beiträge: 282

01.04.2012, 12:42:52 via Website

Ich frage die Variable über MeineKlasse.getCounter() ab. Ich erzeuge also vorher kein Objekt davon, könnte es daran liegen?
getCounter() ist eine statische Methode von MeineKlasse welche nur den counter zurück gibt.

Antworten
Dark Blood Studios
  • Forum-Beiträge: 203

01.04.2012, 12:49:18 via Website

Daniel online
Ich erzeuge also vorher kein Objekt davon, könnte es daran liegen?
Die Variable ist statisch, also brauchst du kein Objekt erzeugen. Der Fehler muss wo anders liegen.

Antworten
Daniel online
  • Forum-Beiträge: 282

01.04.2012, 13:20:38 via Website

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...

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

01.04.2012, 13:32:12 via Website

Ist zwar noch wenig kontext, aber versuch mal ein synchronized so das alle Threads die Änderungen "sehen"...

public static synchronized int getCount(){
return count;
}

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

01.04.2012, 16:53:07 via Website

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.

Antworten
reiti.net
  • Forum-Beiträge: 339

01.04.2012, 17:02:26 via Website

Ich schätze du hast einen Fehler im von dir entfernten "irrelevanten" Code :-)

Rein aus dem Gefühl heraus würd ich sagen, du zählst die falsche count variable hoch. Schon rein aus Gründen der Codelesbarkeit, schreib doch einfach mal "Eieruhr.count++" statt nur "count++";

Antworten