OOP Verständisfrage zu Klassenvariablen

Gustl_Java

Aktives Mitglied
Hallo,

ich benötige eine Variable, eigentlich ein 2-dim array wo ich in jeder klasse erzeuge und dort dann darauf zugreifen und verändern kann.

Da fiel mir die Klassenvariable ein.

Java:
public class Schulstunden 
{ 
  static String[][] school_hours; 
  static 
  { 
    String[][] school_hours= new String[7][];
    for(int i = 0; i < school_hou.length; i++)
       school_hours[i] = new String[24];        

    for(int i = 0; i < school_hours.length; i++) 
       for(int j = 0; j < school_hours[i].length j++)
           school_hours[i][j] = "";
  } 
}

Diese static Methode wird dann wohl nur beim ersten Erzeugen der Klasse aufgerufen?

Somit kann ich ja dann von jeder Klasse, in der ich ein Objekt von Stundenplan erzeuge, darauf zugreifen, abrufen, verändern und sind die Inhalte dann alle gleich, quasi synchron?

Im Moment erzeuge ich das array in jeder klasse neu, und hole es mir im Hauptfenster immer wieder mit getfunktionen ab... das finde ich ziemlich unschön und möchte dafür eine besser lösung.

Danke.
Gruß Gustl
 
G

Gast2

Gast
Hallo,

ich benötige eine Variable, eigentlich ein 2-dim array wo ich in jeder klasse erzeuge und dort dann darauf zugreifen und verändern kann.

Diese static Methode wird dann wohl nur beim ersten Erzeugen der Klasse aufgerufen?

Beim laden der Klasse Stundenplan

Somit kann ich ja dann von jeder Klasse, in der ich ein Objekt von Stundenplan erzeuge, darauf zugreifen, abrufen, verändern und sind die Inhalte dann alle gleich, quasi synchron?

Jein: Es gibt diese Varibale mit ihrem Inhalt nur einmal. Das heißt der Inhalt ist auch nur einmal da und alle die drauf zugreifen greifen dementsprechend auf das Gleiche zu.

Im Moment erzeuge ich das array in jeder klasse neu, und hole es mir im Hauptfenster immer wieder mit getfunktionen ab...

So wie du das vorhast mit einer Klassenvariable ist es aber meiner Meinung nach noch unschöner. Wenn dann nimm ein Singleton (Entwurfsmuster) ? Wikipedia, und auch da rüber kann man sich streiten da es ja quasi wieder ein statischeer Zugriff ist.
 

KrokoDiehl

Top Contributor
Vom objektorientieren Ansatz her ist das -man verzeihe mir- ziemlicher Mist. Über die statische Variable hast du erstens nicht nur eine verkappte globale Variable, was man als Tabu bezeichnen kann, sondern auch nur einen globalen Stundenplan.
Wenn man nun verschiedene Stundenpläne anlegen/verwalten möchte, z.B. für den Schüler Max und für Schülerin Anna, dann ist das damit nicht möglich. Selbst für ein Programm das NUR den eigenen Stundenplan verwaltet, wäre das Unsinn.

Gustl_Java hat gesagt.:
Im Moment erzeuge ich das array in jeder klasse neu, und hole es mir im Hauptfenster immer wieder mit getfunktionen ab... das finde ich ziemlich unschön und möchte dafür eine besser lösung.
Immer neu erzeugen ist natürlich falsch. Du musst einmal einen Stundenplan anlegen und dann daraus deine Informationen holen bzw. sie reinschreiben. Dann ist es vielmehr eine Sache, wie du an den verschiedenen Stellen deines Programms an dieses eine gewisse Stundenplan-Objekt rankommst.
 

Gustl_Java

Aktives Mitglied
Dann ist es vielmehr eine Sache, wie du an den verschiedenen Stellen deines Programms an dieses eine gewisse Stundenplan-Objekt rankommst.

Genau das ist es was mir nicht so gefällt.
In meinem Programm wird nur ein Stundenplan benutzt.
ich habe ein JFrame, von dort aus kann ein JDialog_Stundenplan, JDialog_Ferien und ein JDialog_Noten aufgerufen werden.

Auf das school_hours array muss ich im JFrame, JDialog_Stundenplan und im JDialog_Noten zugreifen können.

Meine Idee jetzt:
Ich erzeuge EINMAL das array im JFrame, übergebe es dem JDialog, und nach beenden des Dialogs hole ich mir dann das, eventuell veränderte, array aus dem JDialog. ISt das eine "saubere" Lösung?

Aber Moment, ist es nicht so das ich dann immer nur die referenz übergebe und ich mir das mit get methoden sparen kann?!

Leider habe ich hier im Moment kein Java auf dem PC und kann es auch nicht testen, aber werde es mal ausprobieren... eigentlich sollte das so gehn!?
 

KrokoDiehl

Top Contributor
Na, an einer zentralen Stellen muss einmal der Stundenplan erzeugt werden. Von mir aus ist das der Frame.
Wenn dieser nun einen Dialog öffnet, und der Dialog auch den Plan braucht, kann man den Stundenplan übergeben - ja, intern ist das eine Referenz, also es ist tatsächlich nur ein Objekt, solange du nicht irgendwo ein weiteres new machst.
Also folgender Rahmen-Code würde schon tun:
Java:
public final class MeinHauptFenster extends JFrame
{
    private final StundenPlan meinStundenplan;

    public MeinHauptFenster()
    {
        super("Stundenplan");
        meinStundenplan = new StundenPlan(); //hier wird ein Objekt erzeugt
        // ...
    }
    
    public StundenPlan getStundenplan()
    {
        return meinStundenplan;
    }

    private void zeigeEinenDialog()
    {
        // Variante A:
        JDialog dlg = new MeinDialog(this, "Titel", meinStundenplan); // hier bekommt der Dialog eine Referenz auf den Stundenplan, die muss er intern natürlich speichern
        ...

        // Variante B:
        JDialog dlg = new MeinDialog(this, "Titel"); // hier bekommt der Dialog eine Referenz auf das Hauptfenster, d.h. er kann dort die Methode getStundenplan() aufrufen und bekommt somit das gleiche Stundenplan-Objekt
        ...
        
    }    
}

Die statische Variante mag zwar bequemer wirken, erzeugt aber ne Menge Probleme. Z.B. könnte dann irgendeine Stelle irgendwo im Programm
Java:
Schulstunden.school_hours = null;
machen und schon fliegen dir NullPointerExceptions um die Ohren, ohne dass du leicht nachvollziehen kannst, wieso das Objekt null ist. Das saubere Programmieren fängt halt schon bei kleinen Progrämmchen an :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Interface Verständisfrage Java Basics - Anfänger-Themen 8
M kleine Verständisfrage zur Klassenhierarchie, speziel JMenuItem Java Basics - Anfänger-Themen 8
W Verständisfrage zu Graphics Objekt Java Basics - Anfänger-Themen 3
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
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
D Globale Klassenvariablen. Java Basics - Anfänger-Themen 12
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