Wieso werden in Java Funktionen mit static deklariert/definiert?



  • Hi,
    Wieso ist das in Java so? Ich hab schon mit bekommen, dass wenn ich mir eine Java Library anlege um dort meine Utilities zu definieren, diese Funktionen auch statisch sein müssen, ansonsten finde ich diese Funktion später nicht in meiner Main. Welchen sinn macht das?

    Gruß Tobi.



  • Weil Java 100% Objectorientiert ist und es da halt keine FUnktionen gibt.
    Über den Sinn lässt sich streiten...



  • Hi.

    static heißt, dass Deine Methode an die Klasse gebunden ist. Du kannst dann also auch über den Klassennamen auf diese Methode zugreifen. Alle anderen Methoden sind an Objekte gebunden. In dem Fall brauchst Du also ein Objekt, um auf diese Methode zugreifen zu können.

    Wenn Du eine Methode hast, die praktisch nur eine Hilfstätigkeit durchführt und nirgendwo irgendeinen Zustand verändert, auf den sie nicht über ihre Parameter zugreifen kann, dann kannst Du sie im Prinzip static machen. Meistens macht es aber Sinn, eine Methode den Objekten einer Klasse zuzuordnen.



  • Also sollte ich meine Funktionen in meiner Library nur dann staisch deklarieren, wenn ich sie auch wirklich irgendwo in einem anderen Module verwende?



  • Es gibt nur wenige Fälle, in denen man Methoden statisch machen sollte, z.B. Factory-Methoden, "getInstance()"-Methoden in Singletons, Methoden in Utility- oder Hilfsklassen (wie java.lang.Math). Sonst ist es fast immer ein Zeichen für einen schlechten OO-Entwurf, wenn man statische Methoden verwendet.





  • T0bi schrieb:

    ja...



  • T0bi schrieb:

    Richtig. Wenn Du ein Objekt nicht mehr referenzierst, dann wird der entsprechende Speicher automatisch von der JVM freigegeben. Das ist die "Garbage Collection". Kannst ja mal etwas zu diesem Stichwort im Internet such. Da solltest Du eine ganze Menge finden.

    Wenn Du irgendwelche speziellen Resourcen des Systems belegst, kann es allerdings trotzdem sein, dass Du die manuell wieder freigeben musst, nachdem Du sie nicht mehr brauchst. In dem Zusammenhang gibt es bei Objekten einiger Klassen eine Methode dispose oder so ähnlich. Java wird diese Resourcen zwar auch ansonsten im Normalfall abgeben (Wenn das Objekt vom Garbage Collector eingesammelt wird, wird der sogenannte Finalizer durchlaufen, in dem derartige Resourcen normalerweise freigegeben werden, falls sie noch belegt sind), aber der genaue Zeitpunkt für eine derartige Freigabe ist dann nicht definiert.



  • Jo hab mir gerade nen Tutorial durch gelesen.Da ich ja vorher mehrere Jahre C++ hatte und Java ja von C++ "abstammt" ist das irgendwie jetzt auch kein Problem für mich da ein Programm zu schreiben. Allerdings bin ich noch etwas verwirrt mit der ganzen public schreibweise da und so. Des mit den Modulen ist auch net wirklich ein Problem.

    Was mich nur ein wenig wundert das Java so wenig Bibliotheken bzw Referenzen besitzt?! Ich hab mir jetzt die NetBeans IDE gesaugt um mich mal ein wenig um zu schaun.

    Wie komm ich jetzt zu einer Konsolenausgabe? Oder ganz und gar irgendwas mit 3D. Ist es richtig das Java seine eigene Schittstelle ist und nicht irgenwo auf OpenGL oder DX zugreift?

    Und sicher gibt es da dann doch auch extra andere Referenzen oder?



  • T0bi schrieb:

    Jo hab mir gerade nen Tutorial durch gelesen.Da ich ja vorher mehrere Jahre C++ hatte und Java ja von C++ "abstammt" ist das irgendwie jetzt auch kein Problem für mich da ein Programm zu schreiben. Allerdings bin ich noch etwas verwirrt mit der ganzen public schreibweise da und so. Des mit den Modulen ist auch net wirklich ein Problem.

    Was mich nur ein wenig wundert das Java so wenig Bibliotheken bzw Referenzen besitzt?! Ich hab mir jetzt die NetBeans IDE gesaugt um mich mal ein wenig um zu schaun.

    Wie komm ich jetzt zu einer Konsolenausgabe? Oder ganz und gar irgendwas mit 3D. Ist es richtig das Java seine eigene Schittstelle ist und nicht irgenwo auf OpenGL oder DX zugreift?

    Und sicher gibt es da dann doch auch extra andere Referenzen oder?

    das ist natürlich schön, dass du so ein c++ pro bist, dann wird dir java ja nicht schwerfallen 👍
    wenig bibliotheken? klar std::xxx hat dir natürlich mehr geboten 🙄
    ich sag nur swing, io, math,net, util, sql,rmi,xml,awt ...

    konsolenausgabe mit netbeans? gibt doch genug beispielprojekte...
    "das Java seine eigene Schittstelle ist" was?



  • kA deswegen frag ich ja?!
    Dachte irgendwie immer das Java sowas wie OpenGL ist *g*
    Hab mich halt nie wirklich mit beschäftigt. Doch ich wollte mal langsam mit anfang, weil wenn dann bald des Informatik Studium kommt, wird mit Java geproggt.



  • wo willst du denn studieren?
    denn an den meisten unis wird mit python geproggt 🙄



  • Magdeburg 😃



  • T0bi schrieb:

    Da ich ja vorher mehrere Jahre C++ hatte und Java ja von C++ "abstammt"

    Du hattest mehrere Jahre C++ und weißt nicht, was public bedeutet und was
    static-Methoden sind? 😮

    Ich schätze mal, daß du nochniemals objektorientiert in C++ programmiert hast,
    sondern dich nahezu ausschließlich mit dem imperativen Anteil
    von C++ (also mit C) beschäftigt hast; und das Schlüsselwort virtual
    in C++ wird für dich wahrscheinlich auch ein Buch mit sieben Siegeln sein. 🕶



  • steff3 schrieb:

    wenig bibliotheken? klar std::xxx hat dir natürlich mehr geboten 🙄

    C++ hat mehr strings 😃



  • T0bi schrieb:

    Wie komm ich jetzt zu einer Konsolenausgabe? Oder ganz und gar irgendwas mit 3D. Ist es richtig das Java seine eigene Schittstelle ist und nicht irgenwo auf OpenGL oder DX zugreift?

    Für 3D gibt es eine ganze Reihe von Libraries... "Java3D" (ganzes 3D Framework), "JOGL" (OpenGL Schnittstelle), "jPCT" und andere.

    Und zur Konsole... "java.lang.System.out/err/in" angucken, damit kann man schon arbeiten :p


Anmelden zum Antworten