Static

Hansi8123

Mitglied
Ich bin recht neu in Java und mir wurde immer gesagt das ich nicht "static" benützen soll.
Was ist so schlimm daran?
Und was soll ich sonst benützen?
Man könnte ja nur mit setter und getter arbeiten aber geht das nicht leichter?
 
K

kneitzel

Gast
 

mihe7

Top Contributor
Mit static werden Variablen, Methoden oder Typen in einer Klasse derart definiert, dass sie ohne ein Objekt nutzbar sind. Das widerspricht dem Ansatz der Objektorientierung. Außerdem gibt es von einer statischen Variable nur ein Exemplar.

static ist nicht per se falsch, sonst gäbe es das Schlüsselwort in der Sprache erst gar nicht, aber man muss wissen, wann man es einsetzt bzw. wann nicht.

Willst Du global verfügbare Konstanten definieren? Dann bist Du mit static final richtig.
Willst Du reine Funktionen definieren, die nur die übergebenen Parameter verwenden? Dann ist Du mit static richtig.
Willst Du die main-Methode schreiben? Dann brauchst Du static.

In allen anderen Fällen braucht es schon einen guten Grund, um static zu verwenden.

Und was soll ich sonst benützen?
Man könnte ja nur mit setter und getter arbeiten aber geht das nicht leichter?
Zu ersten Frage: Objekte. Zur zweiten: das hat nichts damit zu tun, ob Du eine Variable static deklarierst oder nicht.
 

MoxxiManagarm

Top Contributor
Man könnte ja nur mit setter und getter arbeiten aber geht das nicht leichter?
Am Anfang kommt einen das "schwierig" vor. Schwierig eher im Sinne von viel Schreibarbeit. Aber zum einen erkennst du irgendwann die Vorteile, gewöhnst dich daran und viele IDE's erleichtern dir durch Shortcuts die Schreibarbeit bei Themen wie getter + setter.

Und was soll ich sonst benützen?
Objekt instanzieren und dessen Methoden verwenden.

Was ist so schlimm daran?
@mihe7 erklärt das ziemlich gut. Ein Beispiel, welches in vielen Übungsaufgaben vorkommt für eine Verwendung von static, ist eine fortlaufende Nummer / ein Zähler von Objekten einer Klasse. So soll in einigen Übungsaufgaben z.B. gezählt werden wie viele Objekte von Klasse A erstellt wurden oder Klasse B, die eine fortlaufende inkrementelle ID bekommt.

Java:
class A {
    private static int count = 0;
    
    public A() {
        count++;
    }
}

class B {
    private static int nextId = 1;
    private int id;
    
    public B() {
        id = nextId++;
    }
}
 

mihe7

Top Contributor
Mir fällt gerade auf, dass wir auf die Nachteile noch nicht eingegangen sind. Wie oben geschrieben, sind Konstanten kein Problem. Führt man dagegen mit static globale Variablen ein, können diese auch global - also von überall aus im Code - verändert werden. Folgen:
  1. Weil man es kann, wird es früher oder später auch gemacht. Man bekommt Spaghetti-Code.
  2. Die Codeteile, die eine globale Variable nutzen, stehen in einer Abhängigkeit zueinander, was zu einer fragilen Anwendung führt.
Beispiel aus der Praxis von einer App, die ich mal übernehmen musste. Unter Android kann man nicht so einfach auf Objekte eines anderen "Fensters" (aka Activity) oder Dienstes zugreifen, daher hat sich der Programmierer überlegt, dass ein Austauch der Objekte über static-Variablen eine super Idee wäre. Und weil das so schön einfach funktioniert, wurde das natürlich für die ganze App übernommen, so dass man etwas wie einen zentralen Speicher bekam. Dadurch musste bei der Verarbeitung, die sich naturgemäß über verschiedene Codeteile verstreut, eine ganz bestimmte Reihenfolge im Code eingehalten werden. Ergebnis war, dass Du eine Stelle des Codes nur schief anzuschauen brauchtest, damit sich plötzlich an einer völlig unerwarteten Stelle das Verhalten der App änderte. Sowas ist für die Tonne und das Umschreiben hat im Verhältnis irrsinnig viel Zeit gekostet.
 

Neumi5694

Top Contributor
Das alles heißt nicht, dass public static prinzipiell schlecht ist, beispielsweise ist ja "System.out" ebenfalls static und wird oft und gerne verwendet (bis man lernt, was Logger sind).

Ein paar grundlegende Programmfunktionen lege ich in einer Globals-Klasse so ab. Aber deine Datenobjekte sollten möglichst ohne auskommen.

"static" und "getter und setter" schließen sich übrigens nicht gegenseitig aus. Ich denke, du hattest da "public static" Variablen im Sinn. Das gehört sich wirklich nur für Konstanten.

Deine Datenobjekte sollten weder public variablen haben, noch eine statische Eigenschaft (die würden sich alle Instanzen der Klasse ja teilen).
 
Ä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
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
K static, non-static Krise Java Basics - Anfänger-Themen 4
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