Wann nutzt man static?

Overskill

Aktives Mitglied
Hey Leute Frage klingt leicht und ich weiß auch wie static funktioniert etc., aber wann habt ihr es schon einmal praktisch gebraucht(außer in der main :p ). Würde mich mal für ein paar Beispiele interessieren, da ich es auch noch nicht bei GUIS oder Threads verwendet habe/ bzw. verwendet gesehen habe. Bitte nicht sone 0815 Übungsbespiele wie Bierkästen durch den Konstruktor hochzählen :D. Nur sowas wie final static ...?
#

Danke
Over
 
Zuletzt bearbeitet:

Ruzmanz

Top Contributor
da ich es auch noch nicht bei GUIS oder Threads verwendet habe/ bzw. verwendet gesehen habe

Welches Framework? ... spielt eigentlich keine Rolle. Schau mal in die Klasse Color. Die Klasse "Math" ist der absolute static Anhänger.

Am besten benutzt man sie gar nicht. Wer ohne auskommt hat immer das bessere OOP Design.

Wen interessiert schon das OOP Design? Ich nutze gerne "char, int, float, ...". Ich nutze gerne Enums. Ich werde auch Lambdas nutzen.


PS: Galileo Computing :: Java ist auch eine Insel - 5 Eigene Klassen schreiben
 
Zuletzt bearbeitet:

stg

Top Contributor
Am besten benutzt man sie gar nicht. Wer ohne auskommt hat immer das bessere OOP Design.

Was statische Variablen angeht, stimme ich dir zu. Wenn schon static, dann i.d.R. auch final...
Dass statische Methoden dem OOP-Gedanken wiedersprechen, finde ich aber nicht. Das (eventuell) unnötige Erstellen einer Instanz kann u.U. doch recht teuer werden. Da wird mitunter sogar der Speicher knapp :)
 

Thallius

Top Contributor
Was statische Variablen angeht, stimme ich dir zu. Wenn schon static, dann i.d.R. auch final...
Dass statische Methoden dem OOP-Gedanken wiedersprechen, finde ich aber nicht. Das (eventuell) unnötige Erstellen einer Instanz kann u.U. doch recht teuer werden. Da wird mitunter sogar der Speicher knapp :)

Bin ich im Prinzip bei dir wenn man weis wo man gefahrlos static objecte einsetzen darf. Leider kenne ich zu viele Apps die z.b.mal eben eine static methode benutzen um mit einem webservice zu reden. Da man ja von ganz vielen Stellen aus in der app auf den Webservice zugreifen muss ist das die einfachste Lösung. Also mache ich den Zugriff static.... Falscher geht es einfach nicht mehr.

Deshalb ist meine Meinung. Wer keine static benutzt kann erstmal keinen fehler machen. Anders herum aber eben schon.

Gruss

Claus
 
Zuletzt bearbeitet:

Deros

Bekanntes Mitglied
nicht aus meiner Feder aber gerade zur Hand:

Java:
public class JSFUtils
{

  private static final String NO_RESOURCE_FOUND = "Missing resource: ";

  /**
   * Method for taking a reference to a JSF binding expression and returning
   * the matching object (or creating it).
   * @param expression EL expression
   * @return Managed object
   */
  public static Object resolveExpression(String expression)
  {
    FacesContext facesContext = getFacesContext();
    Application app = facesContext.getApplication();
    ExpressionFactory elFactory = app.getExpressionFactory();
    ELContext elContext = facesContext.getELContext();
    ValueExpression valueExp =
      elFactory.createValueExpression(elContext, expression, Object.class);
    return valueExp.getValue(elContext);
  }

  public static String resolveRemoteUser()
  {
    FacesContext facesContext = getFacesContext();
    ExternalContext ectx = facesContext.getExternalContext();
    return ectx.getRemoteUser();
  }

  public static String resolveUserPrincipal()
  {
    FacesContext facesContext = getFacesContext();
    ExternalContext ectx = facesContext.getExternalContext();
    HttpServletRequest request = (HttpServletRequest) ectx.getRequest();
    return request.getUserPrincipal().getName();
  }

  public static Object resloveMethodExpression(String expression,
                                               Class returnType,
                                               Class[] argTypes,
                                               Object[] argValues)
  {
    FacesContext facesContext = getFacesContext();
    Application app = facesContext.getApplication();
    ExpressionFactory elFactory = app.getExpressionFactory();
    ELContext elContext = facesContext.getELContext();
    MethodExpression methodExpression =
      elFactory.createMethodExpression(elContext, expression, returnType,
                                       argTypes);
    return methodExpression.invoke(elContext, argValues);
  }
}
 

Thallius

Top Contributor
Und was passiert nun, wenn z.b. Die letzte Methode von einem thread aufgerufen wird und bevor sie beendet ist, kommt ein task Switch und der dann aktive thread ruft die ebenso auf? Dann hast du aber eine ganz feine Race-Condition und so einen Fehler zu finden ist richtig schwer.

Gruss

Claus
 
Zuletzt bearbeitet:

arilou

Bekanntes Mitglied
static-Variablen sollte man vermeiden, da stimm' ich Joose zu.

Wann macht man eine Methode 'static'?
Ganz einfach - wenn sie keine Objekteigenschaften benötigt (liest oder schreibt) - d.h. immer, wenn's keinen Compilerfehlermeldung ergibt. (Ich stimme jedoch Joose zu, dass dies oft auf einen Programmaufbau hindeutet, der nicht sehr OOP-geprägt ist.)

Beispiel:
Java:
public class ComplexeZahl
{
  public static ComplexeZahl add( ComplexeZahl c1 , ComplexeZahl c2 )
  {
    // [...] arbeitet ohne jemals auf 'this' zuzugreifen, darum 'static'
  }
}

// nicht sehr OOP; besser:

public class ComplexeZahl
{
  public void add( ComplexeZahl c )
  {
    this.realTeil += c.getRealteil();
    this.imagTeil += c.getImagteil();
  }
}
 

stg

Top Contributor
Oder noch besser direkt

Java:
public ComplexNumber add(ComplexNumber c) {
    return new ComplexNumber(this.re + c.getRe(), this.im + c.getIm());
}

und die Klasse komplett immutable halten. Sowas ist schließlich ein Paradebeispiel für ein Value-Object. Wenn man das beherzigt, dann ist gegen deine erste Variante (die static-Methode) sogar überhaupt nichts einzuwenden.

:popcorn:
 

Moro

Mitglied
Objekt im Sinne von Instanz, da magst du recht haben aber in diesem Fall meine ich eher das Objekt als solches. Wie eben auch ein Auto, ein Haus und ein Boot Objekte sind.

Gruß

Claus

Hä? Keine Objekte einer Instanz sondern Objekte als solches? Bitte was? Objekte sind immer Instanzen einer Klasse. Auch ein Haus, ein Boot und ein Auto Objekt. Das hat alles nichts mit static zu tun.

Gib doch einmal ein konkretes Beispiel für so ein zwei Methoden einer solchen Hilfsklasse.

Gruss

Claus

Eine Klasse static oder Methoden static zu setzen macht vor allem dann Sinn, wenn ich weiß das ich aus einer Klasse keine Objekte erzeugen muss, weil es keine Objekteigenschaften beinhaltet. Schau dir doch mal die Klasse Math der Java Standardbibliothek an, wenn du Beispiele für static Methoden suchst.

Ich habe irgendwie den Eindruck, du weißt gar nicht so wirklich wofür static gut ist. Vielleicht meinst du sogar das Richtige aber das Fachvokabular scheint dir nicht so geläufig zu sein.
 
Zuletzt bearbeitet:

stg

Top Contributor
Hä? Keine Objekte einer Instanz sondern Objekte als solches? Bitte was? Objekte sind immer Instanzen einer Klasse. Auch ein Haus, ein Boot und ein Auto Objekt. Das hat alles nichts mit static zu tun.
Du willlst ihn doch falsch verstehen.... er hätte auch schreiben können "irgendwelche Dinge" o.Ä.

Ich habe irgendwie den Eindruck, du weißt gar nicht so wirklich wofür static gut ist. Vielleicht meinst du sogar das Richtige aber das Fachvokabular scheint dir nicht so geläufig zu sein.

Wenn du so willst...

Eine Klasse static zu setzen macht - oder zumindest Methoden aus dieser - macht vor allem dann Sinn, wenn ich weiß das ich davon keine Objekte erzeugen muss. Schau dir doch mal die Klasse Math der Java Standardbibliothek an, wenn du Beispiele für static Methoden suchst.

...dann solltest du wissen, dass die Klasse Math zwar final und nicht instanzierbar ist, aber das heißt noch lange nicht, dass die Klasse static ist. Das ist in Java bei "1st Lvl Klassen" nämlich gar nicht möglich.

:popcorn:
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Ich würde dahingehend eh nur variablen und oder Methoden / Klassen als static deklarieren insofern diese :

( der gesamten Anwendung / bzw. bestimmten Schichten, immer zur Verfügung stehen müssen / sollen )

und oder :

- konstant bleiben ( sprich Konstanten )
- Hilfsmethoden bereitstellen welche nur an wenigen punkten innerhalb der eigentlichen Applikation genutzt werden,
und somit gewisse Funktionalität kapseln ( Erzeugen von Writern / Streams / usw. )
- oder wenn ich garantieren muss das z.B alle Instanzen einer Klasse zetral verfügbar sein müssen, so kann ich den weg
über eine Statische Collection wählen, welcher bei Objekterzeugung direkt alle Objekte hinzugefügt werden.

Aber das ist nur meine Meinung, auch wenn es nicht in allen Punkten dem Gedanken der OOP entspricht ;)
 
Zuletzt bearbeitet:

stg

Top Contributor
I
- oder wenn ich garantieren muss das z.B alle Instanzen einer Klasse zetral verfügbar sein müssen, so kann ich den weg
über eine Statische Collection wählen, welcher bei Objekterzeugung direkt alle Objekte hinzugefügt werden.

Das ist ein schönes Beispiel, fnde ich. So löse ich es z.B. im Webumfeld, wenn ich mir eingeloggte Besucher merken muss und direkten Zugriff auf deren Session-Objekt haben möchte.
 

Moro

Mitglied
...dann solltest du wissen, dass die Klasse Math zwar final und nicht instanzierbar ist, aber das heißt noch lange nicht, dass die Klasse static ist. Das ist in Java bei "1st Lvl Klassen" nämlich gar nicht möglich.

Ich habe auch nicht geschrieben das die Klasse Math static ist, sondern das er da statische Methoden finden kann, nach denen er gefragt hatte. ob "1st Level" oder nicht, solche Rechenoperationen würde ich genauso statisch implementieren, auch wenn sie nicht zum JDK gehören würden.

Du willlst ihn doch falsch verstehen.... er hätte auch schreiben können "irgendwelche Dinge" o.Ä.

Verstehe ich immer noch nicht. Was denn für "Dinge"? Entweder ich habe Objekte, oder ich habe keine. Es gibt kein "dazwischen". Wenn ich Objekte habe, dann sind das immer Instanzen einer Klasse - was denn auch sonst?
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
KogoroMori21 Wann ist der richtige Zeitpunkt, um sich Hilfe zu suchen? (Bin Informatik-Student) Java Basics - Anfänger-Themen 10
I Logik Zahlungsprozess - Wann Bestellobjekt anlegen? Java Basics - Anfänger-Themen 2
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
berserkerdq2 Java streams, wann nutze ich ::, also 2x Doppelpuntk bei Streams? Java Basics - Anfänger-Themen 5
W Wann und warum hashcode und equals? Java Basics - Anfänger-Themen 14
W Wann Rückgabewerte 0, 1, -1? Java Basics - Anfänger-Themen 27
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
K In andere Zahlensysteme umwandeln, wann klappt immer der Trick mit log? Java Basics - Anfänger-Themen 6
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35
F Wann ist es eine Instanz und wann nicht? Java Basics - Anfänger-Themen 1
C Instanzen, wann muss ich Instanzen erzeugen & wo?) Java Basics - Anfänger-Themen 23
S Wann Methode abstract? Java Basics - Anfänger-Themen 10
S Wann buffer löschen? Java Basics - Anfänger-Themen 5
R Wie überprüfen wann der User online oder offline ist? Java Basics - Anfänger-Themen 5
C Polymorphie Was genau ist Polymorphie und wann genau sollte man es verwenden? Java Basics - Anfänger-Themen 9
I Wann ist Client plattformunabhängig? Java Basics - Anfänger-Themen 22
M Best Practice Wann eine Methode schreiben ? Java Basics - Anfänger-Themen 14
K Warum funktioniert das und wann erden die Objektmethoden nun ausgeführt? Java Basics - Anfänger-Themen 7
IngoF Welches Event kommt wann? Java Basics - Anfänger-Themen 8
M Wann eigene implementierte HashCode Methode zwingend erforderlich? Java Basics - Anfänger-Themen 1
X Wann schreibt man diese Syntax zeichen { } Java Basics - Anfänger-Themen 8
C Klassendesign / Wann Interface implementieren und wann Klassen vererben? Java Basics - Anfänger-Themen 3
S Wann existiert eine Instanz (eigene Klasse) Java Basics - Anfänger-Themen 8
M Wann PATH und wann JAVA_HOME in Windows System 7 setzen? Java Basics - Anfänger-Themen 2
M Wann final verwenden? Java Basics - Anfänger-Themen 5
M Wann eine Wrapper Klasse verwenden und wann einen primitiven Datentypen? Java Basics - Anfänger-Themen 8
D Ab wann getter und setter Java Basics - Anfänger-Themen 2
B Erkennen, wann static oder nicht? Java Basics - Anfänger-Themen 7
E wann welche Konstanten verwenden? Java Basics - Anfänger-Themen 7
P Wann Byte-Stream und wann Character-Stream? Java Basics - Anfänger-Themen 11
T Vererbung Wann wird die Methode paint aufgerufen? Java Basics - Anfänger-Themen 4
M Wann statische Methoden/Attribute? Java Basics - Anfänger-Themen 2
vandread Java Wildcards - Wann super wann extends? Java Basics - Anfänger-Themen 2
K Wann Vererbung und wann Interface verwenden? Java Basics - Anfänger-Themen 12
D Wann genau nutze ich ein solches Interface? Java Basics - Anfänger-Themen 3
K Wann genau brauche ich die Anweisung gleich null? Java Basics - Anfänger-Themen 10
B Wann toString() überschreiben? Java Basics - Anfänger-Themen 21
S OOP Wann Proxies und Interfaces? Java Basics - Anfänger-Themen 3
P Threads Wann läuft es parallel ab ? Java Basics - Anfänger-Themen 4
C Variablen Wann werden Instanzvariablen initalisiert? Java Basics - Anfänger-Themen 10
P Java Stream, wann welche Stream verwenden? Java Basics - Anfänger-Themen 3
T Ab wann ist es ein großes Projekt? Java Basics - Anfänger-Themen 35
N Bessere Performance durch final: wann denn überhaupt? Java Basics - Anfänger-Themen 28
D Wann genau abstrakte Klasse und wann ein Interface verwenden? Java Basics - Anfänger-Themen 4
W Wann nutze ich "import"? Java Basics - Anfänger-Themen 12
A junit test wann verwendet man "was"? Java Basics - Anfänger-Themen 4
H Wann ein Objekt der Programmklasse in main anlegen Java Basics - Anfänger-Themen 2
G Wann ist ein == Vergleich bei Gleitkommazahlen fahrlässig? Java Basics - Anfänger-Themen 8
T Wann for und wann while?? Java Basics - Anfänger-Themen 35
-horn- Wann wird alles NaN erzeugt? Java Basics - Anfänger-Themen 22
S Wann wird eine Klasse geladen? Java Basics - Anfänger-Themen 17
C this - wann verwende ich das? Java Basics - Anfänger-Themen 10
T Threads - Ab wann wirds Kritisch?! Java Basics - Anfänger-Themen 7
M Wann muss man eine Variable mit set-/get-Methoden in eine Bean schreiben? Java Basics - Anfänger-Themen 19
G field public/private wann Java Basics - Anfänger-Themen 11
GambaJo Ab wann neue Klasse erzeugen? Java Basics - Anfänger-Themen 2
G Wann Arrays, wann Collections? Java Basics - Anfänger-Themen 36
GambaJo Wann try.catch nutzen? Java Basics - Anfänger-Themen 11
B objekt wann als final deklarieren? Java Basics - Anfänger-Themen 2
N Wann muss eine Methode - protected sein wann public wann. Java Basics - Anfänger-Themen 5
Y Wann / Wozu inner class Java Basics - Anfänger-Themen 3
K StringBuilder notwendig ab wann? Java Basics - Anfänger-Themen 42
S wann static Funktionen wann nicht Java Basics - Anfänger-Themen 6
N Wann und wie oft finalize Methode verwenden( überschreiben ) Java Basics - Anfänger-Themen 6
Bernasconi Programmierstil / Wann eine neue Datei? Java Basics - Anfänger-Themen 5
M wann, welche schleife Java Basics - Anfänger-Themen 3
M Ab wann ist die Datei sichtbar? Java Basics - Anfänger-Themen 3
G Herausfinden, wann mehrere Threads abgeschlossen sind Java Basics - Anfänger-Themen 3
G Überprüfen wann ein Dokument abläuft? Java Basics - Anfänger-Themen 3
N SAX, StAX, JDOM oder DOM , ab wann welches für XML Java Basics - Anfänger-Themen 14
M Wann ist ein Programm beendet? Java Basics - Anfänger-Themen 6
G Wann am besten getSize() aufrufen? Java Basics - Anfänger-Themen 6
I Festellen wann Methode in anderer Klasse fertig ist Java Basics - Anfänger-Themen 5
M wann statische klassen? Java Basics - Anfänger-Themen 14
M Wann ist initialisieren sinnvoll? Java Basics - Anfänger-Themen 4
B Wann Comparator und wann Comparable Java Basics - Anfänger-Themen 6
R Wann benutzt man << oder >> ? Java Basics - Anfänger-Themen 2
G Klassen: Wann initialisiere ich wo meine Variabeln Java Basics - Anfänger-Themen 6
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
N Wozu nutzt man in der Main Methode das args Array? Java Basics - Anfänger-Themen 10
R Compiler-Fehler Klasse A nutzt Objekt von Klasse B, um Methode von Klasse B auszuführen Java Basics - Anfänger-Themen 11
S "%s" oder "%n" - wofür nutzt man das? Java Basics - Anfänger-Themen 4
G Kraken HTTP Sniffer: ExceptionInInitializerError (Nutzt JNI) Java Basics - Anfänger-Themen 2
G Nutzt ihr die Methode storeToXML von Properties Java Basics - Anfänger-Themen 2
G Nutzt Jemand JCalendar? Java Basics - Anfänger-Themen 3
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

Ähnliche Java Themen

Neue Themen


Oben