Warum nicht static ?

Major_Sauce

Bekanntes Mitglied
Nabend,

ich führe hier gerade eine kleine Diskussion mit jemandem, der so ziehmlich überall static verwendet, wo er nur "kann".
Nun wurde mir immer eingeprügelt -> "static" = BÖSE.
Nun frage ich mich aber warum ist dass den eigentlich so ?
Ich weiß dass dadurch meißt die Kapselung stark vernachlässtigt wirde, die Sicherheit darunter leidet, aber was genau ist denn so schlimm an static ?
Ich weiß auch dass es durchaus Situationen gibt in denen man static benutzen sollte, sonst wäre das ganze ja nutzlos, aber wieso sollte ich es nicht einfach als Standart-modifier benutzen ?

mfg Major
 

ARadauer

Top Contributor
Solange eine Klasse keinen Zustand hat, finde ich es ok.. Irgendwelche Utility/Helper usw..
Aber wenn eine Klasse fachliche Attribute hat... Entitäten/VOs/TOs..... zb ein Kunden Objekt... dann auf keinen Fall... sollte klar sein...

Warum nicht irgendwelche Controller/Service/DAO Klassen statisch machen? Ganz klar: Testbarkeit..., Wiederverwendung, Parameterisierbarkeit, Struktur,

Bei irgendwelchen kleinen Anwendungen ist es im Grunde relativ egal, aber man soll sich auch bei kleinen Projekten "schönes Design" angewöhnen. Sonst fliegt mein bei größeren EnterpriseAnwendungen schnell mal auf die Schnauze ;-)

Ob nicht objektorientiert zu arbeiten jetzt "böse" ist, darüber lässt sich streiten... Es gibt andere mittel und Wege. Aber alles grundsätzlich static zu machen ist einfach nicht der Weg wie man in mit java gehen sollte.
 

RalleYTN

Bekanntes Mitglied
static kannst du immer bei allem verwenden, wovon es nur eins gibt. Kleines Beispiel: du möchtest eine Bibleotheck schreiben, die erweiterte Behandlungen von Exceptions anbietet. Da diese Bibleotheck nur Methoden hat wie:
  • showDialog(Exception exception)
  • print(Exception exception)
  • writeLog(Exception exception, String file)
  • sendLog(Exception exception, String to)
welche nur einmal existieren und deren Klassen nicht extra als Objekte erzeugt werden müssen, kannst du die Methoden statisch machen. Wenn du allerdings z.B. für ein Spiel eine Gegnerklasse definierst und du später mehrere Objekte davon erzeugst, dann solltest du alles nicht-statisch lassen, was Einfluss auf die Variablen für das eines dieser Objekte ändert, übergibt, verarbeitet etc..
 

Major_Sauce

Bekanntes Mitglied
Das ist mir wohl klar, das Verständnis ist nicht das Problem.
Die Frage ist eher, wieso gibt es oft solche "Machs nicht" Drohungen ?
Ich kenne mich recht "gut" mit Java aus, ich programmiere kleine Spiele und streame das ganze.
Neulich war ich am streamen und habe bei einem Kachel-Basierten Spiel public static final werte vergeben, für höhe und breite der Kachel.
Ich sehe da nichts falsches drin, final weis nicht verändert werden soll, public static damit ich jeder zeit von überall drauf zugreifen kann.
Nun bin ich am streamen und 3 oder 4 User meinen,sie müssen sich aufregen dass ich "Static" verwende.
Ich weiß dass es nicht schlimm ist, aber es wäre interessant zu wissenw as da in der Vergangenheit war, dass static einfach als "Böse" angesehen wird.
 

Flown

Administrator
Mitarbeiter
Static wird ja nicht als böse angesehen, sondern wird eben in den meisten Fällen falsch eingsetzt.
Static ist nichts anderes als ein Singleton und ist in der Klasse als auch in der Instanz verfügbar. Das Problem was sich hier meistens aufwirft, dass unerfahrene Programmierer static Kontext im Instanzkontext verwenden und sich wundern, warum sich ein Programm so verhält.
Also ich verwende static wirklich nur als Konstanten - wie du beschrieben hast static final - alle anderen Problemstellungen kann man anders lösen.
 

Thallius

Top Contributor
Die Verlockung etwas "mal eben schnell" static zu machen, weil man dann ganz einfach von überall aus darauf zugreifen kann ist einfach riesig. Vor allem für Anfänger.
zu 99% ist das aber nicht nötig, sondern kann mit einem besseren Software-Design auch ohne static gelöst werden, was die Sache viel eleganter und auch für anderer einfacher zu verstehen und zu warten macht.

Gruß

CLaus
 

RalleYTN

Bekanntes Mitglied
Das ist mir wohl klar, das Verständnis ist nicht das Problem.
Die Frage ist eher, wieso gibt es oft solche "Machs nicht" Drohungen ?
Ich kenne mich recht "gut" mit Java aus, ich programmiere kleine Spiele und streame das ganze.
Neulich war ich am streamen und habe bei einem Kachel-Basierten Spiel public static final werte vergeben, für höhe und breite der Kachel.
Ich sehe da nichts falsches drin, final weis nicht verändert werden soll, public static damit ich jeder zeit von überall drauf zugreifen kann.
Nun bin ich am streamen und 3 oder 4 User meinen,sie müssen sich aufregen dass ich "Static" verwende.
Ich weiß dass es nicht schlimm ist, aber es wäre interessant zu wissenw as da in der Vergangenheit war, dass static einfach als "Böse" angesehen wird.
Da hätt auch ich kein static verwendet.
Die Werte wären dann in meiner Map-Klasse und über ein Getter zu erreichen. Das was ich immer als public static final deklariere ist eine instanz der Hauptklasse in der Hauptklasse.
Java:
public final class Game {
    public static final Game GAME = new Game();

    private Map map = new Map();

    public static void main(String[] args) {

    }

    public Map getMap() {
        return this.map;
    }
}
Auf diese Weise kann man eigentlich fast alles in einem Spiel nicht-static lassen und hat trotzdem von überall Zugriff.
Zum Beispiel will ich die Breite der Karte haben.
Java:
Game.GAME.getMap().getWidth();
 

Thallius

Top Contributor
Sorry aber das ist genau das falsche Design das ich meinte :)

Es gibt überhaupt keine Grund von ausserhalb auf Game zuzugreifen, denn alles innerhalb von Game ist Bestandteil davon. Genau damit brichst du das komplette OOP Konzept.

Gruß

Claus
 

Tom299

Bekanntes Mitglied
Ich nutze static immer, wenn ich zentrale Variablen brauche, auf die ich von überall Zugriff brauche und ich fühle mich dabei überhaupt nicht böse :D

z.B. wenn du eine GUI-Anwendung hast und ein Benutzer loggt sich ein, du den Benutzer aber auf allen sagen wie 40 Views / Controllern brauchst. Gibst du dann jeder View bzw. jedem Controller den User im Konstruktor oder per Setter mit? Und wenn du noch andere Objekte brauchst, wie groß würde dann dein Konstruktor oder die Setter-Liste werden?
Nee, für sowas nutze ich dann doch lieber eine Globals-Klasse, die alle static-Objekte usw. beinhaltet und von wo ich überall drauf zugreifen kann. Und das ist sicherlich übersichtlicher und verständlicher, also zisch Objekte durch die ganzen Klassen durchzuschleifen.

Ich nutze auch gerne statische Methoden um z.B. ein Datum zu formatieren oder sonstige zentrale Methoden im Zugriff zu haben.

Das ist zumindest meine Meinung ;)
 

Thallius

Top Contributor
Jeder View sollte seinen Controller haben. Das nennt sich dann MVC und dieser Controller hat natuerlich Zugriff auf das Modell und dieses Modell gibt ihm den Benutzer.

Gerade für sowas braucht es absolut keine static.

Gruß

Claus
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N nicht static und auch nicht new Allgemeine Java-Themen 3
L OOP Klassen-Design (static oder nicht?) Allgemeine Java-Themen 3
T Static kann nicht verändert werden Allgemeine Java-Themen 3
N Vererbung Static & private fields - Nicht ganz einfach? Allgemeine Java-Themen 4
G URLClassLoader stößt static Block nicht an Allgemeine Java-Themen 8
G static oder nicht Allgemeine Java-Themen 4
J Nicht-static variable in static variable kopieren - wie? Allgemeine Java-Themen 14
Zrebna Wieso sollte man Null-Prüfungen nicht mit Optional-Objekten nutzen? Allgemeine Java-Themen 13
kodela Textfeld nicht rechteckig Allgemeine Java-Themen 10
G Doppelklick auf Javaprogramm klapt nicht Allgemeine Java-Themen 1
W Timer terminiert nicht Allgemeine Java-Themen 5
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
W Überflüssige Deklaration vermeiden...war da nicht mal was? Allgemeine Java-Themen 3
N lwjgl kann textureSampler nicht finden Allgemeine Java-Themen 4
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
T .Jar kann man nicht ausführen Allgemeine Java-Themen 18
P JDK nicht installiert in Net Object Fusion Allgemeine Java-Themen 7
D Image bewegt sich nicht nach Klicken auf Button Allgemeine Java-Themen 15
N Regex schlägt nicht an Allgemeine Java-Themen 10
Y Wieso krieg ich die Unit Tests nicht hin Allgemeine Java-Themen 55
D Erste Schritte Mp3 Datei kann nicht von der Festplatte geöffnet werden - mit ChatGPT erstellt Allgemeine Java-Themen 7
G Popup wird nicht sichtbar Allgemeine Java-Themen 9
8u3631984 Funktions Parameter mit Lombok "NonNull" annotieren wird in Jacococ Testcoverage nicht herausgefiltert Allgemeine Java-Themen 3
kodela String kann nicht zu Pfad konvertiert werden Allgemeine Java-Themen 16
M Apache Proxy Weiterleitung auf Tomcat funktioniert nicht wie gewünscht Allgemeine Java-Themen 1
Momo16 Brauche Hilfe - Java Projekt kann nicht erstellt werden Allgemeine Java-Themen 12
OnDemand ApacheCommon FTP Client zuckt nicht Allgemeine Java-Themen 3
T JavaPoet - (noch) nicht existente Typen Allgemeine Java-Themen 2
E Es ist nicht möglich, eine Batch-Anweisung auszuführen. Allgemeine Java-Themen 9
C Was passt hier nicht bei der Calendar-Class Allgemeine Java-Themen 2
T Testing JUnit5: try ... catch arbeitet nicht sauber Allgemeine Java-Themen 6
W While Schleife funktioniert nicht ganz Allgemeine Java-Themen 4
OnDemand MemoryLeak nicht zu finden Allgemeine Java-Themen 26
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
H do-while Schleife funktioniert nicht wie ich es möchte Allgemeine Java-Themen 7
ERlK JDA Code funktioniert nicht? Allgemeine Java-Themen 4
OnDemand Ram Freigabe erfolgt nicht nach Prozessende Allgemeine Java-Themen 18
OnDemand XML desializing Attribute bringt nicht erwartetes Ergebnis Allgemeine Java-Themen 16
T ImageIcon wird nicht angezeigt Allgemeine Java-Themen 6
N JAVA-Code mit Grafikfenster zeichnet in Windows, aber nicht Mac. Allgemeine Java-Themen 4
stormyark TikTakToe funktioniert nicht Allgemeine Java-Themen 10
N Warum wird die For Schleife nicht betreten Allgemeine Java-Themen 4
Tiago1234 Hauptklasse konnte nicht gefunden oder geladen werden Allgemeine Java-Themen 38
T Remove bei ArrayList funktioniert nicht Allgemeine Java-Themen 2
M Map<String,String>funktioniert nicht richtig Allgemeine Java-Themen 4
I "Neues" Lizenzmodell Oracle - JRE nicht mehr zur Redistribution freigegeben? Allgemeine Java-Themen 16
J c Programm läuft nicht in compilierter Version des Java Projektes Allgemeine Java-Themen 7
A code wird nicht ausgeführt Allgemeine Java-Themen 3
Blender3D Alte Beiträge nicht mehr vorhanden Allgemeine Java-Themen 6
M Warum hat Java dieses und jenes nicht... Allgemeine Java-Themen 8
W Bilder werden in App mit Jar-Datei nicht angezeigt Allgemeine Java-Themen 15
Micha43 Applet *.jar läuft nicht auf dem Mac Allgemeine Java-Themen 8
M Warum bekommen ich den Result nicht ? Allgemeine Java-Themen 17
Kiki01 Häufigster Buchstabe lässt sich nicht ermitteln Allgemeine Java-Themen 30
OnDemand RegEx /compilebekomme nicht die erwarteten Werte Allgemeine Java-Themen 9
HerrBolte Seltsamer Fehler nur in der Windows- und nicht in der Java-Console O_O Allgemeine Java-Themen 16
P String.replace() funktioniert nicht? Allgemeine Java-Themen 3
N nicht einsehbarer Fehler im code, kann nicht mehr übersetzten Allgemeine Java-Themen 51
P Karate API Test läuft nicht durch . initializationError Allgemeine Java-Themen 21
Z macOS java konnte nicht entfernt werden xpc verbindungsfehler Allgemeine Java-Themen 4
T Schaltfläche wird nicht gefunden Allgemeine Java-Themen 4
boschl2000 Springerproblem-Implementierung funktioniert nicht richtig Allgemeine Java-Themen 1
F Getter Methode aufrufen funktioniert nicht Allgemeine Java-Themen 1
N Gierigen Regex in nicht-gierigen umwandeln Allgemeine Java-Themen 4
N Regulärer Ausdruck funktioniert nicht Allgemeine Java-Themen 6
AleXusher Hauptklasse startlösung konnte nicht gefunden oder geladen werden Allgemeine Java-Themen 1
G @PostConstruct Annotation nicht mehr gültig ? Allgemeine Java-Themen 7
L Objekte in Set nicht gefunden Allgemeine Java-Themen 13
T Projekt baut nicht mehr/lässt sich nicht mehr ausführen Allgemeine Java-Themen 6
izoards log4j2 will nicht.... Allgemeine Java-Themen 15
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
1Raini Java if-Abfrage funktioniert nicht! Allgemeine Java-Themen 3
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
I serialVersionUID - explizit vergeben oder nicht? Allgemeine Java-Themen 6
MiMa Vorhandenes das nicht existiert?? Allgemeine Java-Themen 7
LimDul Hä? Lambda-Ausdruck geht, Methoden-Referenz nicht Allgemeine Java-Themen 8
O Jar lässt sich auf bestimmten Pc nicht starten Allgemeine Java-Themen 18
T Fremde Typen mockt man nicht? Allgemeine Java-Themen 3
Killunox MaxHeap Zuweisung unter Linux funktioniert nicht Allgemeine Java-Themen 1
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
B neuroph hält beim XOR lernen nicht an Allgemeine Java-Themen 13
kodela JDialog zeigt Text nicht an Allgemeine Java-Themen 5
Dann07 Java-Programm findet DLLs nicht! Allgemeine Java-Themen 20
D Twitch API mit HttpURLConnection läuft nicht? Allgemeine Java-Themen 0
M Test geht auf Travis und mit Github Action schief aber nicht lokal Allgemeine Java-Themen 3
R Threads Clip loop loopt nicht Allgemeine Java-Themen 2
Dann07 MP3 Datei abspielen funktioniert nicht Allgemeine Java-Themen 6
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
OnDemand JMS Messages nicht abgeholt Allgemeine Java-Themen 0
O Aus JAR-Datei erstellte EXE-Datei funktioniert nicht Allgemeine Java-Themen 10
A Mp3 Player funktioniert nicht Allgemeine Java-Themen 0
W String -> byte[] -> String - Sieht jemand was ich nicht sehe? Allgemeine Java-Themen 10
M Console geht nicht auf (Windows 10) Allgemeine Java-Themen 3
J Hilfe, Jar Datei kann nicht ausgeführt werden Allgemeine Java-Themen 2
W Enumeration ein Array/List als Eigenschaft mitgeben - warum geht das nicht? Allgemeine Java-Themen 0
W Javac nicht bei Installation installiert Allgemeine Java-Themen 9
S HTML den ich von einer URL hole nicht identisch mit dem HTML im Browser Allgemeine Java-Themen 1
S Java.exe exestiert, aber irgendwie auch nicht Allgemeine Java-Themen 11
D ArrayListe delete Methode klappt nicht Allgemeine Java-Themen 12

Ähnliche Java Themen

Neue Themen


Oben