static, non-static Krise

k3ltis

Mitglied
Hallo liebe Leute,

ich habe ein konkretes Problem, bei dem ich nicht weiß, ob ich es "static" oder "non-static" machen soll. Ich kenne mich mit der Materie gut genug aus, um zu wissen, was static für Nachteile mit sich bringt - kenne aber auch die Vorteile.

Um zu verstehen was mein Problem ist, folgt nun eine Skizzierung der Klassen und Methoden, die daran beteiligt sind:

Java:
Class EnemieVerwaltung {
// verwaltet verschiedene arten von Gegnern,
// die in einem Array gespeichert werden

Enemie [] enemie; 
// Array vom Typ Enemie

public Enemie findeGegner(String name){
// Diese Methode sucht in dem Array enemie nach
// einem Objekt, zu dem der übergebene String name
// passt und gibt es zurück
}

}

Java:
Class WaveEnemies {

Enemie enemie;

// Diese Klasse speichert ein EnemieObjekt, von dem zunächst
// nur der name bekannt ist.
// Im Konstruktor wird dann folgendes passieren:

public WaveEnemies(String name){
//...
this.enemie = EnemieVerwaltung.findeGegner(name);
//...
}


}

So. Hier ist das Problem...
Ich müsste an JEDES WaveEnemies-Objekt eine Referenzvariable von EnemieVerwaltung
übergeben. Wenn ich die Methode "findeGegner(String name)" jedoch static mache - muss ich
zwangsläufig auch die Variable Enemie [] enemie; static machen - womit ich aber ein problem habe.

Was würdet ihr mir raten?


Edit: nicht dass es mir was ausmachen würde eine Referenzvariable einzurichten. Doch das wäre bei weitem nicht die einzige...
es gibt in dem Programm noch etliche Stellen an denen man den Referenzvaiablenwust durch ein simples static lösen könnte... es sieht langsam aber sicher ein wenig unübersichtlich aus...
 
Zuletzt bearbeitet:

pzypher

Aktives Mitglied
Ich würde mal behaupten, dass static weder Vor- noch Nachteile hat. Ob etwas static oder nicht sein soll/muss, ist in der Programmlogik eigentlich meist vorgegeben.

Ich nehme mal an, du benötigst nur ein Objekt bzw. kein Objekt der Klasse EnemieVerwaltung!? Wenn ja, dann erzeugst du entweder ein Objekt oder belässt die Klassenmember static.

Warum kannst du denn Enemie [] enemie nicht static machen?
 

k3ltis

Mitglied
Gute Frage, warum kann ich das nicht static machen?

Weil die ganze Welt immer gleich das Gesicht verzieht, wenn man etwas static macht, was man nciht unbedingt static machen muss. Das gilt vielleicht nicht bei Methoden, wohl aber bei Variablen.

Wenn mir ein allgemein "sauberer" Programmierstil schnurz wäre hätte ich diese Frage nicht gestellt... sondern das Ding einfach static gemacht, weil es die einfachere Lösung ist.
 
N

nillehammer

Gast
Mach es nicht static!

Allgemein gegen static spricht:
  • Es verträgt sich nicht gut mit Vererbung (nur non-static Methoden können bspw. überschrieben werden)
  • Man kann mit static Methoden keine Interfaces implementieren
  • Durch den direkten Zugriff auf Klassen-Felder/-Methoden exportiert man die direkte Referenz auf die konkrete Implementierung. Das macht Codeänderungen schwieriger (höherer Anpassungsaufwand in Clientcode)
  • Bestimmte Pattern lassen sich mit static nicht umsetzen
  • Klassen mit static-Methoden lassen sich nicht für Dependency-Injection verwenden

Code:
EnemyVerwaltung
klingt nach einer Klasse, die zentrale Services erbringt (enemies finden, hinzufügen, löschen...). Definier Dir dafür ein Interface, das alle Methoden Vorschreibt, die Du brauchst:
Java:
public interface EnemyVerwaltung {

  /**
    * @return true, wenn enemy geadded werden konnte, sonst false
    */
  // "public Enemy" ;-))
  public boolean addeGegner(Enemy enemy);

  /**
    * @return einen Enemy nach seinem namen, null, wenn name invalid
    */
  public Enemy findeGegner(String name);

  /**
    * @return den gelöschten Enemy nach seinem namen, null, wenn name invalid
    */ 
  public Enemy loescheGegner(String name);
}
Lasse Deine Array-basierte Implementierung das Interface implementieren. Und programmier dann nur gegen das Interface.

Wofür der Aufwand? Du hast dann in Deinem Code nur Aufrufe auf Interface-Methoden. Die Implementierung dahinter kannst Du transparent austauschen. Unrealistisch? Du wirst vielleicht in zwei Wochen über das Map-Interface stoßen und merken, dass es mit Maps besser geht als mit Arrays. Schon hast du eine neue Implementierung. In einem Monat ist das Spiel so gut, dass Du gerne die Daten persistent speichern möchtest, vielleicht mit Datenbank. Wieder eine neue Implementierung...

Ist das Grund genug, warum man sehr viel seltener static Felder/Methoden benutzen sollte, als man es gemeinhin sieht?
 

k3ltis

Mitglied
Das ist nicht nur Grund genug, du hast mich absolut überzeugt!

Danke dafür!

p.s.: und danke für die rechtschreibkorrektur :D
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
A Instance methods should not write to "static" fields Java Basics - Anfänger-Themen 4
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
viktor1 Methoden Methode schreiben static void readText (String filename) {...} zu WordHistogramSample.java Java Basics - Anfänger-Themen 13
M static ArrayList in non-static Java Basics - Anfänger-Themen 12
B Static vs non static und Probleme daraus Java Basics - Anfänger-Themen 13
S Methoden 2 non-static Methoden, trotzdem Fehler "non static method can not be referenced from a static context" Java Basics - Anfänger-Themen 9
R UML-Bild (Erkennung ob static o. nicht) Java Basics - Anfänger-Themen 18
R Schulaufgabe, Bruache Hilfe mit non-static Methoden Java Basics - Anfänger-Themen 2
B Static Attribute in einer Klasse, wie geht das? :O Java Basics - Anfänger-Themen 19
NaZuRe Geld(Wert) von der public static void main in die public static void Blackjack Java Basics - Anfänger-Themen 2
H Static Java Basics - Anfänger-Themen 5
K Ausgaben auf der Konsole (static Varible) Java Basics - Anfänger-Themen 9
S public static boolean Java Basics - Anfänger-Themen 4
Vamecruft Compiler-Fehler public static void zu static String ändern Java Basics - Anfänger-Themen 2
L non-static Fehler Java Basics - Anfänger-Themen 16
S Klassenmethode ohne static Java Basics - Anfänger-Themen 2
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
J Fehlermeldung unklar. non-static variable player0 cannot be referenced from a static context Java Basics - Anfänger-Themen 4
D Methoden Scannervariablen in static Methoden Java Basics - Anfänger-Themen 5
P non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 6
V the static method should be accessed is a static way Java Basics - Anfänger-Themen 6
NormanPatrickBenner static non-static Java Basics - Anfänger-Themen 82
N Erste Schritte "non-static method" oder "XYZ can not be resolved" Java Basics - Anfänger-Themen 21
B Email versenden, muss Methode static sein? Java Basics - Anfänger-Themen 7
R static in der Methode Java Basics - Anfänger-Themen 2
E Problem mit static Methode Java Basics - Anfänger-Themen 4
H Vererbung Static Scanner Objekt verwenden - von StdIn in einer importierten Klasse lesen Java Basics - Anfänger-Themen 10
M Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 10
I Abstrakte Klasse - static Attribute deklarieren Java Basics - Anfänger-Themen 14
C Methoden Unterschied zwichen public int, public static int und public static void Java Basics - Anfänger-Themen 2
J Frage zu: public static void main (String[]args) Java Basics - Anfänger-Themen 1
T Datentypen enum static Chaos (blutiger anfänger) Java Basics - Anfänger-Themen 5
D Das leidige Thema static.... Java Basics - Anfänger-Themen 15
Aprendiendo Interpreter-Fehler "non-static variable this cannot be referenced from a static context" Java Basics - Anfänger-Themen 2
T Problem mit static Java Basics - Anfänger-Themen 6
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
S Vererbung Zugriff auf Methode funktioniert nicht (static/non-static) Java Basics - Anfänger-Themen 3
snipesss Was kann 'static'? Java Basics - Anfänger-Themen 4
H Variablen error: non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 4
M public static int in ActionListener Java Basics - Anfänger-Themen 6
J static verschachtelte Klassen und innere Klassen Java Basics - Anfänger-Themen 1
H Nicht Static Funktion ohne Objekt aufrufen? Java Basics - Anfänger-Themen 6
E Objekte und static Java Basics - Anfänger-Themen 2
K Methoden Methoden in Methoden -> static oder nicht? Java Basics - Anfänger-Themen 7
D Erklärung static boolean Java Basics - Anfänger-Themen 6
L Was genau macht "public static void" ? Java Basics - Anfänger-Themen 12
U Erste Schritte cannot be referenced from a static context Java Basics - Anfänger-Themen 1
B ja ja schon wieder einer mit einer public static void main(string[] args) Frage... Java Basics - Anfänger-Themen 8
J Java: static bei Vererbung Java Basics - Anfänger-Themen 5
O Zu viel static im Projekt Java Basics - Anfänger-Themen 9
F Static final Klasse Java Basics - Anfänger-Themen 0
N static und Objekt kombiniert?!? Java Basics - Anfänger-Themen 3
O Wann nutzt man static? Java Basics - Anfänger-Themen 19
B Klassen Eigene "non static" Klasse in Main verwenden! Java Basics - Anfänger-Themen 12
D neue public static class variablen in array speichern? Java Basics - Anfänger-Themen 6
A Static variablen --- Anwendungsbereich Java Basics - Anfänger-Themen 11
B Erste Schritte Wie komme ich aus Static raus?!! Java Basics - Anfänger-Themen 4
V Static Methods Java Basics - Anfänger-Themen 5
W Compiler-Fehler "non-static method cannot be referenced"-Problem Java Basics - Anfänger-Themen 6
S OOP Klasse mit static-Eigenschaften - HashMap füllen Java Basics - Anfänger-Themen 6
3 OOP static class in einer Klasse Java Basics - Anfänger-Themen 6
B static individuell "vererben"? Java Basics - Anfänger-Themen 8
B Erkennen, wann static oder nicht? Java Basics - Anfänger-Themen 7
T Static Fehler Java Basics - Anfänger-Themen 1
R public static void Rückgabe Java Basics - Anfänger-Themen 5
P Compiler-Fehler public static void main, Grundloses Problem Java Basics - Anfänger-Themen 4
A Cannot make a static reference to the non-static field Java Basics - Anfänger-Themen 6
W Variablen Automatisch static? Java Basics - Anfänger-Themen 3
O Warum muss ich static? Java Basics - Anfänger-Themen 6
O Static Java Basics - Anfänger-Themen 15
E non-static method und static context Java Basics - Anfänger-Themen 15
B non static interface Methode Java Basics - Anfänger-Themen 16
J KeyListener,MouseListener,MouseMotionListener und static Java Basics - Anfänger-Themen 7
S Static void Methode Java Basics - Anfänger-Themen 12
Q Unterschied zwischen static und keinem Modifier Java Basics - Anfänger-Themen 15
O Main-Methode static modifier umgehen Java Basics - Anfänger-Themen 10
J Variablen non-static variable Java Basics - Anfänger-Themen 2
P Erste Schritte public oder static oder wie? Java Basics - Anfänger-Themen 7
J static - Methoden Java Basics - Anfänger-Themen 22
X Erste Schritte Methode ohne Static Java Basics - Anfänger-Themen 4
B Classpath static block - Verwirrung Java Basics - Anfänger-Themen 2
S Methoden Warum ist sleep static? Java Basics - Anfänger-Themen 9
R Schlüsselworte static Methoden und Imports Java Basics - Anfänger-Themen 10
M Methoden "Non-static method xy cannot be referenced from a static context" Java Basics - Anfänger-Themen 20
J Probleme mit static generische Klasse Java Basics - Anfänger-Themen 6
S Aufruf Einer Methode aus einer anderen Klasse - Static Fehler Java Basics - Anfänger-Themen 4
W Methodenaufruf innerhalb einer Klasse - static vs. this Java Basics - Anfänger-Themen 3
K Objekt erstellen - error: non-static variable this cannot be referenced from a static context Java Basics - Anfänger-Themen 17
H non-static method cannot be referenced from a static context Java Basics - Anfänger-Themen 2
Y Gebrauch von static Java Basics - Anfänger-Themen 29
L Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 6
T getClass() im static Kontext Java Basics - Anfänger-Themen 12
S Frage zu public static Java Basics - Anfänger-Themen 29
M Problem mit Static Method Java Basics - Anfänger-Themen 8
H Methoden Static ? Java Basics - Anfänger-Themen 10
K Erste Schritte Zugiff ohne static Java Basics - Anfänger-Themen 5
X Static char Problem Java Basics - Anfänger-Themen 11
H static final vs. final static Java Basics - Anfänger-Themen 3
K Variablen Cannot make a static reference to the non-static field time Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben