Static oder andere Lösung

Network

Top Contributor
Hi,

ich weiss nicht ob ich eine static-Lösung verwenden soll oder eine andere (und da wüsste ich keine).

Ich habe eine Klasse die von einer anderen Klasse vererbt. Die ganze Struktur sieht vor, dass jede Unterklasse Einstellungen bzw. Werte "fest"legt.

Rein theoretisch könnte die Klasse 1-Xmal aufgerufen werden. Damit scheidet die Möglichkeit aus, die Werte (ein int-Array) einfach als Variable in der Klasse zu speichern.
Denn dann wenn man 1000Objekte erstellt, erstellt man auch 1000mal dieses int-Array, das ja eig. sowieso immer nur die selben Daten beinhaltet.
Auch ist dieses Array überhaupt nicht für das Objekt selbst wichtig, es ist eher eine art Definition für andere Objekte, damit die Wissen um was für eine Unterklasse es sich denn ca. handelt.

Ich dachte mir, ich könnte natürlich dieses int-Array als static festlegen. So hätte ich das Array nur ein einziges mal, es wäre direkt den zugehörigen Objekten zugeteilt und ich könnte von überall her die Definition für diese Klasse abrufen.

Nur habe ich ja nicht Java und damit OOP gelernt um static zu verwenden.
Fällt da jmd. sontan eine andere Lösungsmöglichkeit ein?

Rückfragen gerne schreiben :)

Vielen Dank
Gruß
Net
 
Zuletzt bearbeitet:
J

JohannisderKaeufer

Gast
Ein kleiner Codeschnipsel wäre aufschlußreich.

static hat halt das Problem, das

1. das array dann immer bleibt, auch wenn keine Instanz der Klasse mehr vorhanden ist.

2. sollte static möglichst in Kombination mit final verwendet werden, was bei einem Array nun ja ... sieh selbst

Java:
private static final String[] a = {"Wichtig"};
{
a[0] = "HaHa!!!!";
}

Wurde über die Verwendung von Enums schon nachgedacht?
 

Network

Top Contributor
Ein kleiner Codeschnipsel wäre aufschlußreich.

static hat halt das Problem, das

1. das array dann immer bleibt, auch wenn keine Instanz der Klasse mehr vorhanden ist.

2. sollte static möglichst in Kombination mit final verwendet werden, was bei einem Array nun ja ... sieh selbst

Java:
private static final String[] a = {"Wichtig"};
{
a[0] = "HaHa!!!!";
}

Wurde über die Verwendung von Enums schon nachgedacht?

1. Also es ist generell immer eine Instanz der Klasse vorhanden.
Und selbst wenn nicht, es dient zur identifizierung der Eigenschaften der Klasse. Was bspw. für die anderen Objekte wichtig wäre um zu überprüfen ob die Klasse überhaupt aufgerufen werden sollte.

Ich könnte natürlich auch eine 2. Klasse schreiben, die die Definition der anderen Klassen enthält, was aber natürlich bedeuten würde, das Definition und zugehörige Klasse unabhängig voneinander wären und zu Fehlern führen könnte, wegen falschen Einträgen etc. ... .

2. Behalte ich im Hinterkopf.

Enums wüsste ich jetzt nicht wie die mein Problem lösen sollten, schlussendlich handelt es sich auch wieder nur um Werte die dann jede Instanz wiederum im Speicher hätte... also im Grunde egal ob ich Enum oder Array verwende.

Hier ein Beispiel-Code. Der Code der Klasse Oberklasse ist irrelevant in diesem Fall:
Java:
public class Unterklasse1 extends Oberklasse {
	/ * Definition:
	  * int[0]: 0 = doThat, 1 = doThis
	  * int[1]: irgendein Wert für Rechnung dergleichen
	  * int[2]: irgendein Wert für Rechnung dergleichen
	  * /
	private int[] definition = new int[]{ 0, 42, 42*3 };
	
	public getDefinition() {
		return definition;
	}
	public void doSomething() {
		doThat;
	}
}
Java:
public class Unterklasse2 extends Oberklasse {
	/ * Definition:
	  * int[0]: 0 = doThat, 1 = doThis
	  * int[1]: irgendein Wert für Rechnung dergleichen
	  * int[2]: irgendein Wert für Rechnung dergleichen
	  * /
	private int[] definition = new int[]{ 1, 42, 42*3 };
	
	public getDefinition() {
		return definition;
	}
	public void doSomething() {
		doThis;
	}
}

Java:
public class Main {
	ArrayList<Oberklasse> arraylist = new ArrayList<Oberklasse>();
	
	public static void main( String args[] ) {
		arraylist.add( new Unterklasse1() );
		arraylist.add( new Unterklasse2() );
		arraylist.add( new Unterklasse2() );
		arraylist.add( new Unterklasse1() );
		arraylist.add( new Unterklasse2() );
		arraylist.add( new Unterklasse1() );

		for( int i = 0; i < arraylist.size(); i++ ) {
			if( arraylist.get(i).getDefinition()[0] == 0 ) {
				arraylist.get(i).doSomething();
			}
		}
	}
}

Das Problem ist, dass jetzt jede Unterklasse ein eigenes Array im Speicher hält. Vollkommen unnütz und wenn jetzt theoretisch 1000Unterklassen erstellt werden, hat man 1000mal dieses Array im Speicher.

Und deshalb die Frage ob ein Static hier sinnvoll und "anerkannt" wäre oder ob ich da andere Systeme brauche.

Gruß
Net
 
S

Spacerat

Gast
Oberklasse sollte einen Konstruktor
Java:
Oberklasse(Definition definition)
bekommen oder abstrakte Methoden für "doThis" und "doThat" bereitstellen.
"Definition" könnte dabei ein Enum sein oder vllt. ein Imutable evtl. sogar Comparable. Die letzen beiden eignen sich hervorragend zum Cachen in einem private Set in Oberklasse.

Aber auf keinen Fall static! Ist ungesund.
BTW.: Wer sollte eigentlich in Unterklassen noch auf private static zugreifen können? Dann doch lieber die Geschichte mit abstract Methods.
 
Zuletzt bearbeitet von einem Moderator:

Network

Top Contributor
Oberklasse sollte einen Konstruktor
Java:
Oberklasse(Definition definition)
bekommen oder abstrakte Methoden für "doThis" und "doThat" bereitstellen.

naja im Grunde möchte ich ein Programm schreiben für Universalzwecke. Im Grunde eine Engine mit eigener Socket, UPnP, FrmaeLook etc... dafür stelle ich Methoden bereits die später überschrieben werden können. Das ist die doSomething()-Methode wenn auch mit anderer Bezeichnung.

Hier arbeite ich an der Fehlerbehebung, fals Exceptions auftreten. Dabei kann es bestimmte Prioritäten geben und Informationen, die über die Klasse für andere Klassen bekannt sein sollten.

Da kann ich nicht diese verschiedenen Methoden unterteilen weil dort drin alles, wirklich alles passieren könnte.

"Definition" könnte dabei ein Enum sein oder vllt. ein Imutable evtl. sogar Comparable. Die letzen beiden eignen sich hervorragend zum Cachen in einem private Set in Oberklasse.

Und wie oben bereits erwähnt, weiss ich nicht wie dadurch mein Problem gelöst wird. Schlussendlich wird auch hier wieder wie in meinem Bsp. Code für jede Klasse die selbe Variable(?) initialisiert.

Aber auf keinen Fall static! Ist ungesund.
BTW.: Wer sollte eigentlich in Unterklassen noch auf private static zugreifen können? Dann doch lieber die Geschichte mit abstract Methods.

Das denke ich genügt mir als Antwort, nicht static zu verwenden. Ich denke ich schreibe dann einfach ein Singleton, als Repräsentant für die einzelnen Unterklassen, die für die Außenwelt (andere Klassen/Objekte) die Informationen bereit stellen.
Wenn ich auch gerne Enums nehmen würde dafür, aber ich brauche auch mehrere variable definierbare Werte für diverse Aussortierungen.

Btw. wer hat was von "private static" gesagt?

Gruß
Net
 
S

Spacerat

Gast
Btw. wer hat was von "private static" gesagt?
Niemand. Ich bin halt davon ausgegangen, dass du deinen Instanzvariablen schlicht ein static anhängst und gut is'. Hätte fatale Folgen haben können, siehe Post von Johannis. protected oder gar public wären dann ohnehin noch mal 'ne Ecke fataler. Deswegen war private in dieser Hinsicht zumindest schon mal der vernünftigste Gedanke.
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Methoden abstract static Methode Allgemeine Java-Themen 8
N nicht static und auch nicht new Allgemeine Java-Themen 3
P static Blocks und variablen Allgemeine Java-Themen 41
Kirby.exe Cannot make a static reference to the non-static field rimWidth Allgemeine Java-Themen 12
Thallius Ist meine static Helper Class Thread save? Allgemeine Java-Themen 9
S static in Interface und Klasse Allgemeine Java-Themen 2
S static methode im Interface Allgemeine Java-Themen 1
A Variablen non-static variable cannot be referenced from a static content Allgemeine Java-Themen 4
P Static Variable -> unterschiedliche Werte? Allgemeine Java-Themen 1
K Static Variablen verbieten Allgemeine Java-Themen 10
C Generic collections und static typing Allgemeine Java-Themen 4
M Warum nicht static ? Allgemeine Java-Themen 10
M Eine static-Methode verlassen Allgemeine Java-Themen 2
B Schlüsselworte [ERLEDIGT] static { } - Was ist das und wofür kann ich das brauchen? Allgemeine Java-Themen 1
J private static final String variable Allgemeine Java-Themen 8
L Non-static-Variables in Enumerationen Allgemeine Java-Themen 2
L OOP Klassen-Design (static oder nicht?) Allgemeine Java-Themen 3
T Enumeration/Static Final/Bitfield Allgemeine Java-Themen 6
T Static kann nicht verändert werden Allgemeine Java-Themen 3
W Threads Cannot make a static reference.. Allgemeine Java-Themen 13
H Programierstil: static - Zugriff vs. Staticzugriff Allgemeine Java-Themen 24
N Vererbung Static & private fields - Nicht ganz einfach? Allgemeine Java-Themen 4
M Wo hin mit static factory methods? Allgemeine Java-Themen 40
M Public Static importRunning -> Bad Design oder ok ? Allgemeine Java-Themen 5
S Cannot make a static reference to the non-static field MySecondClass.Points Allgemeine Java-Themen 3
M Methoden Static Methoden und Thread??? Allgemeine Java-Themen 4
S auf public void Methode zugreifen ohne static Allgemeine Java-Themen 11
K Static - Problem Allgemeine Java-Themen 10
M Variablen Variablenzugriff aus static void Allgemeine Java-Themen 21
D API - Beispiel + static member in inner (non static) class Allgemeine Java-Themen 2
S static methoden Allgemeine Java-Themen 9
S Performance Frage: Objekt oder static? Allgemeine Java-Themen 33
X HTTP Problem mit static/non static JTextArea Update Allgemeine Java-Themen 17
A Annotation einer Subklasse im static-Block auslesen. Allgemeine Java-Themen 6
woezelmann referenz der outer class aus static nested class heraus Allgemeine Java-Themen 7
B static Variable / Unterklasse Allgemeine Java-Themen 2
I Was macht static { ... } ? Allgemeine Java-Themen 8
G static inner Klassen Allgemeine Java-Themen 7
G static und dynamic linking? Allgemeine Java-Themen 32
J in einer static Variable Wert ändern Allgemeine Java-Themen 6
J Verständnisfrage - nested static classes Allgemeine Java-Themen 11
G static- Methoden überschreiben Allgemeine Java-Themen 10
E Geschwindigkeit static Allgemeine Java-Themen 6
V Static oder wie? Allgemeine Java-Themen 61
I reflection get inner static classes Allgemeine Java-Themen 2
L static main - Spezifikation? Allgemeine Java-Themen 7
G URLClassLoader stößt static Block nicht an Allgemeine Java-Themen 8
D static Allgemeine Java-Themen 46
P static-Methode aus dem Konstruktor aufrufen Allgemeine Java-Themen 6
oliver1974 "(.) should be accessed in a static way" Falsche W Allgemeine Java-Themen 6
P static Klassenvariable Allgemeine Java-Themen 15
B JPasswordField klassenübergreifend auslesen->static Probl Allgemeine Java-Themen 4
F Methoden: static vs. instance Allgemeine Java-Themen 24
MQue static Methoden/Klassen Allgemeine Java-Themen 7
K Warum static-Methoden nutzen Allgemeine Java-Themen 26
G Java-Befehle Native und Static Allgemeine Java-Themen 2
conan2 static-Block in Klassen Allgemeine Java-Themen 6
M JNI, static.a mit load.Library laden? Allgemeine Java-Themen 2
K Static Members von Superklasse für JEDEN Erben Allgemeine Java-Themen 6
padde479 The static method sleep(long) from the type Thread should. Allgemeine Java-Themen 2
M static-Methode vorschreiben Allgemeine Java-Themen 5
S singleton vs. static Allgemeine Java-Themen 7
G Object mit static Feldern speichern Allgemeine Java-Themen 9
J Warum heißt es eig. "public static void main" ? Allgemeine Java-Themen 4
conan2 "Cannot make a static reference to the non-static field Allgemeine Java-Themen 8
P Singleton vs static Allgemeine Java-Themen 19
J parameterized und static fields Allgemeine Java-Themen 4
A Static reference to non-static field Allgemeine Java-Themen 10
S static umgehen Allgemeine Java-Themen 5
G static oder nicht Allgemeine Java-Themen 4
J Problem mit static/non-static Allgemeine Java-Themen 2
G getAppletContext() in static Methode Allgemeine Java-Themen 3
m@nu Programm-Models in Static-Objekten speichern Allgemeine Java-Themen 5
J Nicht-static variable in static variable kopieren - wie? Allgemeine Java-Themen 14
O does not declare a static final serialVersionUID field of . Allgemeine Java-Themen 6
G static vor einem array Allgemeine Java-Themen 2
K Überschreiben von 'static'-Methoden hat anderes Verhalten? Allgemeine Java-Themen 2
A JSP & static-Variablen Allgemeine Java-Themen 3
B Static Import: Syntaxfrage Allgemeine Java-Themen 2
S Static + Speicher + Bytecode etc. Brauche HILFE :/ Allgemeine Java-Themen 11
Z auf static Methode aus anderen Package zugreifen? Allgemeine Java-Themen 7
N this im public static void Allgemeine Java-Themen 3
C Communication zwischen zwei Projekte - static objects Allgemeine Java-Themen 4
S static mit abstract und in interface Allgemeine Java-Themen 10
R Arraylist in andere Klasse leiten und bearbeiten Allgemeine Java-Themen 10
E Swing andere schreibart für jButtoni (i = Zahl des Buttons) Allgemeine Java-Themen 6
perlenfischer1984 Lombok Builder soll andere Klasse bauen Allgemeine Java-Themen 4
R bei eclipse von java in eine andere programmiersprache wechseln? Allgemeine Java-Themen 2
B Chat auf andere Datentypen aufteilen Allgemeine Java-Themen 2
A Datum und Uhrzeit in andere Zeitzone umrechnen Allgemeine Java-Themen 7
X NetBeans Bilder und andere Dateien ins .jar schreiben und wieder aus .jar lesen Allgemeine Java-Themen 6
DanielsLPecke Java Arrays an andere Java Programme schicken und zurück Allgemeine Java-Themen 5
T Während des Programmlaufs andere Programme ausführen Allgemeine Java-Themen 1
F JTable mit Zellen die sich durch andere Eingaben füllen Allgemeine Java-Themen 1
M ZipOutputStream gleiche Datei andere Größe? Allgemeine Java-Themen 0
Todesbote Zeilen aus Excel in andere Excel Tabelle kopieren Allgemeine Java-Themen 0
N Objekte an eine andere Applikation übergeben Allgemeine Java-Themen 3
K LED-Matrix oder andere "Hardware" für JavaProgrammierung Allgemeine Java-Themen 9
F Array viel zu groß...andere Lösungen? Allgemeine Java-Themen 12
M Arraynamen an andere Klasse übergeben für allg. Rechnung Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben