Java programmieren ohne 'static'

Dieses Thema im Forum "Programmierung" wurde erstellt von Joans96, 8. April 2015.

  1. Joans96
    Offline

    Joans96

    Registriert seit:
    9. März 2014
    Beiträge:
    37
    Minecraft:
    Joans96
    Hallo zusammen,

    ich wurde nach meinem letzten Post darauf hingewiesen, dass 'static' in meinen Code, den ich dort mit gepostet habe, viel zu häufig vorkomme. So zieht sich die Existenz des 'static' durch meinen gesamten Code.
    Da ich Java gerne richtig programmieren möchte, also Objektorientiert, kann ich das nicht so lassen.
    Das große Problem, dass ich jetzt habe, ist:

    Wie kann ich das möglichst schnell und effizient ändern?

    Im Grunde geht es darum, dass ich nicht weis, wie ich Variablen und Methoden aus anderen Klassen aufrufen kann.

    Ich bin gestern echt verzweifelt, da ich es selbst nicht lösen konnte.
    Wenn ihr Einsicht in meinen Code möchtet, kann ich gerne diverse Klassen Posten.

    Ich bitte um schnelle Hilfe!

    Mir freundlichen Grüßen
    Jonas96
     
    #1
  2. JTK222
    Offline

    JTK222

    Registriert seit:
    5. September 2013
    Beiträge:
    665
    Ort:
    Planet Erde
    Minecraft:
    JTK222
    Habe mal folgendes Gesehen weiß aber nicht ob es das richtige ist arbeite auch viel zu viel mit static ^^
    Code (Text):
    1. Beispielklasse class = new Beispielklasse();
    2. class.methode;
     
    #2
  3. Joans96
    Offline

    Joans96

    Registriert seit:
    9. März 2014
    Beiträge:
    37
    Minecraft:
    Joans96
    Okey, viele dank dafür, ich werde es so ausprobieren, wenn ich Feierabend habe...
    eine Frage habe ich aber noch: Wann muss ich das ausführen?

    Code (Text):
    1.  
    2. // vor einer Methode ?
    3. Beispielklasse class = new Beispielklasse();
    4. public void metjode()
    5. {
    6.     class.variable
    7. }
    8.  
    9. // in einer Methode ?
    10. public void metjode()
    11. {
    12.     Beispielklasse class = new Beispielklasse();
    13.     class.variable
    14. }
    15.  
     
    #3
  4. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    In einer Methode, wenn du das nur in der Methode brauchst, sonst am Anfang der Klasse außerhalb einer Methode.
    Falls es einen Fehler geben sollte: Du darfst deine Variable nicht "class" nennen.
     
    #4
  5. Joans96
    Offline

    Joans96

    Registriert seit:
    9. März 2014
    Beiträge:
    37
    Minecraft:
    Joans96
    Ja guut, das ist ja auch nur ein Beispiel gewesen, dass man "claas" nicht als Variabel-Namen setzten darf ist mir zum Glück bekannt ^^
    Das wäre ja fast das selbe, wie wenn ich einer "int" variable den Namen "int" geben würde...
     
    #5
  6. Eisphoenix
    Offline

    Eisphoenix

    Registriert seit:
    9. Oktober 2014
    Beiträge:
    82
    Ort:
    Garmisch-Partenkirchen
    Minecraft:
    Eisphoenix
    Der Vorteil von Objektorientierte Programmierung ist ja, das du mehrere Kopien hast. Deine MySQL-Klasse ist Static, änderst du sie jedoch in eine normale Klasse um könntest du mehrere MySQL-Verbindungen aufbauen.

    /Edit
    Aber vergiss nie: Nicht immer ergibt eine Instanzierung einer Klasse Sinn!
     
    #6
  7. MrPyro13
    Offline

    MrPyro13

    Registriert seit:
    29. April 2013
    Beiträge:
    829
    Minecraft:
    MrPyro13
    Hallo,

    das Problem mit dem Zugreifen auf einer anderen Klassen hatte ich auch ^^ und habe es dann gelöst.
    1. Möglichkeit: (nutze ich für den Zugriff auf meine Hauptklasse)
    Code (Text):
    1. private static KLASSE instance;
    2. instance = this; (in der onEnable-Methode ganz oben oder in einem Konstruktor)
    3. public static KLASSE getInstance() {
    4.         return instance;
    5. }
    2. Möglichkeit: (nutze ich für die anderen Klassen)
    Code (Text):
    1. public KLASSE variable;
    2. variable = new KLASSE(); (in der onEnable-Methode)
    Falls es Besseres gibt, bitte ich um einen Hinweis ;)
     
    #7
  8. Thalion
    Offline

    Thalion

    Registriert seit:
    22. Juli 2014
    Beiträge:
    25
    Ort:
    Berlin
    Minecraft:
    Spartaner_v1
    Der Fall ist relativ einfach zu erklären.
    Die "static Methods" sind Methoden, welche objektunabhängig sind. Sie können mit hilfe von Parameter ausgeführt werden. Meistens benutzt man sie für statische Übergaben, Utilities, oder Objekteigenschaften einer ganzen Klasse (nicht eines Objektes).

    Die objektgebundenen Methoden können nur an einem Exemplar der Klasse ausgeführt werden, da sie nicht allgemeingeltend sind, sondern nur für das Exemplar genau einen Wert zurückgeben ( etc. ).

    Ein einfaches Beispiel wäre die Javakomponente Math:
    Math beinhaltet statische Methoden, welche nur mit den Parametern ausgeführt werden. Diese Methoden benötigen kein Objekt, worin die Daten zwischenspeichern etc., sondern geben nur einen Wert, berechnet aus den Parametern zurück.

    Ein Beispiel für objektgebundenen Methoden wäre StringBuilder:
    StringBuilder lässt sich mit "append(param)" erweitern, trimmen, man kann einen substring erstellen. In diesem Fall müssen jedoch die Zeichen der Zeichenkette zwischengespeichert werden. Da die gespeicherte Zeichenkette nicht für alle StringBuilder im gesamten Javacode gleich ist, sondern individuell sein soll, wäre hier eine statische Verarbeitung nicht sinnvoll.

    Ich hoffe ich kann damit ein bisschen weiterhelfen.

    Mfg,
    Thalion
     
    #8
    Joans96 gefällt das.
  9. 可愛い
    Offline

    可愛い

    Registriert seit:
    19. Mai 2014
    Beiträge:
    657
    Das lernt man eigentlich in jedem beliebigen Tutorial über Java. Trozdem ist das für den Anfänger sicherlich immer ein wenig verwirrend, da es essentiell ist, dass man verstanden hat, was objektorientierte Programmierung ist. Die hier genannten Codefetzen sind jedenfalls alle murks, das ist noch immer dasselbe gefrickel.
     
    #9
    MrGoms gefällt das.
  10. Nightishaman
    Offline

    Nightishaman

    Registriert seit:
    3. Januar 2015
    Beiträge:
    51
    #10
  11. 可愛い
    Offline

    可愛い

    Registriert seit:
    19. Mai 2014
    Beiträge:
    657
    Das sieht nicht nach nem hochwertigen Tutorial aus, es sind gelegentlich Schreibfehler drin und die Kapitel sind einfach lächerlich kurz und gehen absolut nicht auf die Themen ein.

    Ich kann nur immer wieder die Onlineversion von "Java ist auch eine Insel" empfehlen: http://openbook.rheinwerk-verlag.de/javainsel/
     
    #11
    MrGoms gefällt das.
  12. GermanUbuntu
    Offline

    GermanUbuntu

    Sowas kannst du dir mal anschauen:
    http://hastebin.com/unadesakik.java

    Das Buch ist okay, doch für Anfänger leicht schwer zu verstehen

    Ich glaube nicht das sich hier irgendeiner "ganz gut" mit Java auskennt... ^^"
     
    #12
  13. DerDr4g0n
    Offline

    DerDr4g0n

    Registriert seit:
    17. Oktober 2014
    Beiträge:
    15
    Ort:
    Planet Erde.
    Ich habe mittlerweile 2,5 Jahre Java Erfahrungen.
    Aber da das meiste hier so oder so "Bukkit-Kiddies" sind kann ich deine Aussage jedoch verstehen.
     
    #13
    [Dev] iTzSasukeHDxLP und MaxCode gefällt das.
  14. GermanUbuntu
    Offline

    GermanUbuntu

    Ich arbeite auch schon 4 Jahre mit Java und es gibt so viele dinge die ich noch nicht kann...

    Es ist nichts gegen dich oder andere devs hier im Forum, doch niemand hier im Forum kennt sich mit Java sehr gut aus.
    Wenn mich jemand vom gegenteil überzeugen will soll er sich bei mir per PN melden :p.
     
    #14
  15. MuellerMH
    Offline

    MuellerMH

    Registriert seit:
    26. Februar 2015
    Beiträge:
    5
    Ort:
    Essen
    Minecraft:
    MuellerMH
    Ich glaub am einfachsten kann man es mit dem Player und einer Weiteren Classe veranschaulichen.

    Hier mal ein DummyCode der NICHT funktionieren wird!

    Code (Text):
    1. MAIN.class
    2. {
    3.     onJoin(JoinEvent e){
    4.         Player player = e.getPlayer();
    5.         GebDemPlayerZeug Zeug = new GebDemPlayerZeug();
    6.         Zeug.addSword(player);
    7.         String playerName = Zeug.getPlayerName();
    8.     }
    9. }
    10.  
    11. GebDemPlayerZeug.class
    12. {
    13.     void addSword(Player player){
    14.         player.Inventory().add(New ItemStack("Sword"));
    15.     }
    16.  
    17.     String getPlayerName(Player player){
    18.         return player.getName();
    19.     }
    20. }
    Man übergibt also der Classe die etwas mit einem Objekt machen soll das Objekt selbst. Es muss nicht in einer Static vorgehalten werden, auch ein String muss nicht vorgehalten (static) werden da das Objekt selbst jederzeit diese Werte bereit stellt.

    Deswegen schreibt man meist auch in jeder Classe getter und setter zu enthaltenden Feldern um diese auszulesen oder zu manipulieren.

    Code (Text):
    1. Staubsauger.class
    2. {
    3.     String marke;
    4.     Integer serial;
    5.     HashMap<String,Integer> daten;
    6.  
    7.     Staubsauger(){
    8.         this.daten = new HashMap<String,Integer>();
    9.     }
    10.  
    11.     String getMarke(){
    12.         return this.marke;
    13.     }
    14.  
    15.     void setMarke(String marke){
    16.         this.marke = marke;
    17.     }
    18.  
    19.     Integer getSerial(){
    20.         return this.serial;
    21.     }
    22.  
    23.     void setSerial(Integer serial){
    24.         this.serial = serial;
    25.     }
    26.  
    27.     Integer getDataByName(String name){
    28.         return this.daten.get(name);
    29.     }
    30.  
    31.     void setDataByName(String name, Integer value){
    32.         this.data.put(name,value);
    33.     }
    34. }
    So braucht man kaum static Variablen außer sie machen wirklich sinn wie die Verbindung einer Datenbank. (Entwurfsmuster::Singleton)
     
    #15
    MaxCode gefällt das.
  16. 可愛い
    Offline

    可愛い

    Registriert seit:
    19. Mai 2014
    Beiträge:
    657
    Ich wüsste nicht, wesshalb sich irgendwer dir gegenüber rechtfertigen sollte. Verallgemeinerungen aufgrund des eigenen Wissens sind oft eine schlechte Idee. Wozu sollte sich auch jemand die Mühen machen hier schön breit Leute über ihre Fehler zu informieren? Bekommt man dafür etwas? Man findet das alles im Internet. Wer nichts findet sucht falsch. Mehr als nen Hinweis, dass etwas falsch ist würde ich z.B. nie geben. Dafür ist mir einfach meine Zeit zu schade. Entweder jemand geht auf meine Kritik ein, macht eigene Recherchen und frägt dann nach, wenn er etwas nicht verstanden hat (indem er Anhand von neu erlagtem Wissen fragen stellt) oder er hat pech. Mir ist das ziehmlich egal ob richtig programmiert oder nicht. Letzteres trägt sogar zu höheren Gehältern auf dem Arbeitsmarkt bei.
     
    #16
    MrPyro13, MrGoms und MiCrJonas gefällt das.