Globale Klassenvariablen.

Status
Nicht offen für weitere Antworten.

Decca

Mitglied
Hallo,

ich steige gerade von C++ zu Java um. In C++ war es möglich globale Objekte zu erzeugen:

Code:
class CBestand
{

	short sWert;		
	short sAnzahl; 
	
	short sGetWert(){return sWert;} //Methode gibt den Wert aus
	void  vSetWert(short x){sWert=x;}	//Methode speichert neuen Wert
	
	short sGetAnzahl(){return sAnzahl;}	//gibt die Anzahl aus
	void  vSetAnzahl(short x){sAnzahl=x;}	//speichert neu eingegebene Anzahl
	
	void  vIncrAnzahl(){sAnzahl++;}		//inkrementiert die Anzahl
	void  vDecrAnzahl(){sAnzahl--;}		//dekrementiert die Anzahl

}

CBestand WarenBestand[5];     // Datenobjekt Global

Ich konnte dann in einer anderen Klasse z.B. WarenBestand[0].vSetWert(5); aufrufen...

Wie löse ich dieses Problem in Java? Das Objektfeld soll in allen Klassen abgefragt und verändert werden. Ich habe schon mit Klassenvariablen hantiert. Aber ich brauche so etwas wie ein Klassenobjekt.

Danke für Hilfe
 

Leroy42

Top Contributor
Am elegantesten ist ein Interface:

Code:
public interface Global {
  static int TheGlobalVariable = 42;
}

Und alle interessierten Klassen implementieren dieses Interface:

Code:
class KlasseClass implements Global {
  int myInitialInt = TheGlobalVariable;
}

Aber als gutes Design würde ich das nicht empfehlen;
lerne lieber auf soetwas wie globale Variablen
überhaupt zu verzichten. :D
 

Decca

Mitglied
Hallo nochmal.

Danke für die Antworten.

Aber mir ist noch nicht klar wie ich mir von der Klasse ein Objekt(feld) z.B. CBestand WarenBestand[5]; erstellen kann, welches in allen Klassen verwendet werden kann.
Wenn ich die Methoden public mache brauche ich doch trotzdem ein Objekt welches die Methoden dann aufruft
(Objekt[0] .sGetWert).

@Leroy42
Wenn ich ein Interface benutze muss ich doch alle Methoden aus dem Interface in einer konkreten Klasse wieder überschreiben oder?
Andere frage wie kriege ich mittels Interface ein Obj. hin womit O[0].Methode aufrufen kann?

Gruß
 
B

Beni

Gast
Ich denke, du suchst das Schlüsselwort "static":

So wird eine statische Methode (Variable, ...) definiert:
Code:
public class Irgendwas{
  public static int tuwas( String x ){
    return ... // irgendwas was halt aus x berechnet wird
  }
}

Und an einer beliebigen Stelle in einer anderen Klasse kannst du schreiben:
Code:
public class Nirgendwo{
  public void mampf(){
    // Zugriff auf die statische Methode "tuwas", ohne dass
    // ein "Irgendwas"-Objekt benötigt wird.
    int wert = Irgendwas.tuwas( "abc" );
  }
}
 

Decca

Mitglied
Ahh mit static habe ich schon gearbeitet, sind ja sogenante Klassenvariablen... Bei mir hat es nicht funktioniert weil ich die Klasse bzw. die Methoden zusätzlich noch mit public bezeichnen muss. Das werde ich mal probieren, danke.
 

Decca

Mitglied
Ok noch eine Sache:

Code:
public class Irgendwas{

static int irgandwann;
static int irgandwo;
static int irgandwie;


  public static int tuwas( String x ){
    return irgendwie // irgendwas was halt aus x berechnet wird
  }
}

wenn ich jetzt die drei Klassenvariablen habe (static int irgendw...), wie kann ich dann ein Feld anlegen wo ich die Sachen bündele: int wert = Irgendwas.Feld[0].tuwas( "abc" );

Code:
public class Nirgendwo{
  public void mampf(){
    // Zugriff auf die statische Methode "tuwas", ohne dass
    // ein "Irgendwas"-Objekt benötigt wird.
    int wert = Irgendwas.Feld[0].tuwas( "abc" );
  }
}

Ich brauche dieses Feld weil ich z.B. 10 Waren brauche die alle unterschiedliche Eigenschaften haben, halt irgendwann, irgendwo...
[/b]
 

Wildcard

Top Contributor
Ich bin mir nicht ganz sicher ob ich dir folgen kann...
Meinst du vielleicht etwas in Richtung enum?

Es würde allerdings helfen wenn du den größeren Kontext das Problems erläutern könnte, dann können wir dir sicherlich eine OOP Lösung anbieten.
 

Decca

Mitglied
Ok dann muss ich noch einmal den Code vom C++ Programm zeigen, anders kann ich das sonst nicht erklären, sorry.

Code:
class CBestand
{

   short sWert;      
   short sAnzahl;
   
   short sGetWert(){return sWert;} //Methode gibt den Wert aus
   void  vSetWert(short x){sWert=x;}   //Methode speichert neuen Wert
   
   short sGetAnzahl(){return sAnzahl;}   //gibt die Anzahl aus
   void  vSetAnzahl(short x){sAnzahl=x;}   //speichert neu eingegebene Anzahl
   
   void  vIncrAnzahl(){sAnzahl++;}      //inkrementiert die Anzahl
   void  vDecrAnzahl(){sAnzahl--;}      //dekrementiert die Anzahl

}

CBestand WarenBestand[5];     // Datenobjekt Global

jetzt habe ich doch mehrere Objekte der Klasse CBestand (CBestand WarenBestand[5]; )
so jetzt möchte ich in anderen Klassen z.B.:


Code:
class Ctuwas
{

int x=WarenBestand[0].sGetWert();
int y=WarenBestand[1].sGetWert();
int z=WarenBestand[2].sGetWert();
...

}

nun z.B. in einer ganz anderen Klasse

Code:
class Cganzanders
{

int x=WarenBestand[0].sGetAnzahl();
int y=WarenBestand[1].sGetAnzahl();
int z=WarenBestand[2].sGetAnzahl();
...

}

so letztes Bsp. eine Klasse wo ich was ändern...

Code:
class Cganzanders
{

int x=WarenBestand[0].vSetAnzahl(1)
int y=WarenBestand[1].vSetAnzahl(2)
int z=WarenBestand[2].vSetAnzahl(3)
...

}

so ich hoffe ich habe mich verständlicher ausdrücken können.[/code]
 

Wildcard

Top Contributor
Mach dir doch einfach eine Klasse die deine Werte kapselt.
Dann erzeugst du ein Array vom Typ dieser Klasse und greifst darauf zu.
Ist doch im prinzip genau das gleiche wie bei C++...
Veilleicht versteh ich's aber auch immer noch nicht :D
 
B

Beni

Gast
Das kannst du mit einem statischen Array lösen:
Code:
public class Irgendwas{
  public static Irgendwas feld[];

  // statischer "Konstruktor", wird aufgerufen wenn 
  // die Klasse geladen wird
  static{
    feld = new Irgendwas[5];
    for( int i = 0; i < feld.length; i++ ){
      // in Java das initialisieren der Elemente nicht vergessen!
      feld[i] = new Irgendwas( i, "abc", 123 );
    }
  }

  // ab hier sind keine Klassenvariablen oder
  // -Methoden mehr notwendig (im Gegenteil, es
  // hätte ziemlich böse Nebeneffekte...)
  private int x;
  public void setX( int x ){
    this.x = x;
  }
}

Und an einer anderen Stelle:
Code:
public class Nirgendwo{
  private void mampf(){
    Irgendwas.feld[4].setX( 456 );
  }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Globale Objekte Java Basics - Anfänger-Themen 2
T Globale Variable mehrmals verwenden Java Basics - Anfänger-Themen 7
Traxter Globale Variable ? Java Basics - Anfänger-Themen 11
Jackii Globale Variable aus anderer Klasse ändern... Java Basics - Anfänger-Themen 4
S Vererbung/Globale Variablen Java Basics - Anfänger-Themen 8
M Variablen Globale Variable? Java Basics - Anfänger-Themen 4
Luk10 Globale (semi-finale) Varibalen Java Basics - Anfänger-Themen 9
U Globale Proxy Einstellungen ändern Java Basics - Anfänger-Themen 3
B Globale vector? Java Basics - Anfänger-Themen 7
C lokale Variable verwenden statt globale Java Basics - Anfänger-Themen 7
B Methoden Globale Methoden "Toolbox" Java Basics - Anfänger-Themen 3
D globale Variablen zur Laufzeit erzeugen Java Basics - Anfänger-Themen 5
S globale Variable deklarieren Java Basics - Anfänger-Themen 10
E Globale int Variable? Java Basics - Anfänger-Themen 6
K Datentypen Globale Variable direkt initialisieren oder im Konstruktor? Java Basics - Anfänger-Themen 13
G Globale Variablen Java Basics - Anfänger-Themen 9
T Globale Variable wird nicht gefunden Java Basics - Anfänger-Themen 6
G Globale Variablen Java Basics - Anfänger-Themen 3
T Globale Variable (Font) Java Basics - Anfänger-Themen 21
O globale variablen Java Basics - Anfänger-Themen 21
M Globale Variablen werden durch KeyListener nicht aktualisier Java Basics - Anfänger-Themen 10
G Müssen globale Funktionen immer "static" sein? Java Basics - Anfänger-Themen 13
A Globale Variable änderbar Java Basics - Anfänger-Themen 3
A Globale Methode ohne imports und übergeben? Java Basics - Anfänger-Themen 2
P textfarbe,textgröße, textart als globale einstellung Java Basics - Anfänger-Themen 7
F Globale Variablen wie in C++? Java Basics - Anfänger-Themen 5
J "Globale Variablen" Java Basics - Anfänger-Themen 26
S globale Variablen Java Basics - Anfänger-Themen 9
P Globale und ständige Überwachung eines Textfeldes auf text? Java Basics - Anfänger-Themen 40
M Superglobale globale Variable? Java Basics - Anfänger-Themen 10
P Globale Variable Java Basics - Anfänger-Themen 3
J Globale Variablen Java Basics - Anfänger-Themen 3
D Globale Variablen Java Basics - Anfänger-Themen 31
C Globale Variablen und Array mit verschiedenen Typen Java Basics - Anfänger-Themen 3
S globale Variablen Java Basics - Anfänger-Themen 7
J "globale" variable definieren? Java Basics - Anfänger-Themen 7
S Globale Variable / Methode Java Basics - Anfänger-Themen 5
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
KogoroMori21 Objektvariablen, Klassenvariablen, Instanzvariablen Java Basics - Anfänger-Themen 1
D Richtige Kommentierung Klassenvariablen Java Basics - Anfänger-Themen 19
Z private Klassenvariablen Java Basics - Anfänger-Themen 8
N Klassenvariablen zurücksetzen Java Basics - Anfänger-Themen 4
G Klassenvariablen & Instanzvariablen Java Basics - Anfänger-Themen 4
J Variablen Unterschied zwischen lokalen-, Instanz-, Klassenvariablen Java Basics - Anfänger-Themen 6
N Vererbung Best Practice: Verfeinerte Klassenvariablen in Unterklasse Java Basics - Anfänger-Themen 5
D Klassenvariablen standardmäßig private oder public? Java Basics - Anfänger-Themen 2
S Initialisierung von Klassenvariablen Java Basics - Anfänger-Themen 7
A Klassenvariablen zusammen fassen Java Basics - Anfänger-Themen 5
G Frage zu Fields - Klassenvariablen Java Basics - Anfänger-Themen 9
A Klassenvariablen Referenz auf ein Objekt Java Basics - Anfänger-Themen 18
M Variablen Gültigkeit von Klassenvariablen bei Vererbung? Java Basics - Anfänger-Themen 4
J Klassenvariablen lesen Java Basics - Anfänger-Themen 13
B Datentypen Klassenvariablen Java Basics - Anfänger-Themen 2
G OOP Verständisfrage zu Klassenvariablen Java Basics - Anfänger-Themen 5
C Klassenvariablen und Klassenmethoden Java Basics - Anfänger-Themen 17
J Problem mit inneren Klassen und Klassenvariablen Java Basics - Anfänger-Themen 11
G Sollte man Klassenvariablen als final deklarieren? Java Basics - Anfänger-Themen 3
X Zugriff auf Klassenvariablen NUR mit get/set Methoden? Java Basics - Anfänger-Themen 8
W Klassenvariablen und Werte ausgeben Java Basics - Anfänger-Themen 2
7 Lokale Variablen, Klassenvariablen, Instanzvariablen Java Basics - Anfänger-Themen 15
H Klassenvariablen,methoden Java Basics - Anfänger-Themen 7
M Zugriff auf Klassenvariablen Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben