# Methodenaufruf innerhalb einer Klasse - static vs. this



## wizdom (10. Jun 2012)

Moin!

Wollte mal fragen, wie ich einen Methodenaufruf innerhalb einer Klasse mache. 
Im Rahmen eines Codebeispiels:


```
class InternerMethodenAufruf {

   public InternerMethodenAufruf(String name) {
      this.name = name;
   }

   public String createSth () {
   ...
   return stuff
   }

   public void createSthElse () {
   ...
   String otherStuff = this.createSth();
   }
}
```

Mir kommt es hier insbesondere auf Zeile 14 an. Funktioniert das so? Worin läge der Unterschied, wenn ich das mit public static String createSth () machen würde und dann in der zweiten Methode InternerMethodenAufruf.createSth() aufrufen würde?

Danke schon mal.


----------



## tagedieb (10. Jun 2012)

Days erste ware ein Instanz aufruf, das andere ein statischer Aufruf. Beides funktioniert!!
Es hängt von deinem Design ab ob welche Methode du verwendest... statische Methoden können auch nur auf statische Variablen zugreifen!

Generel gesagt sollte man auf statische Methoden verzichten, außer man baut eine Library wie z.B. java.lang.Math.
Instanzmethoden sind auch einfacher zu testen als statische Methoden.


----------



## greatergood (10. Jun 2012)

Der Unterschied (static / kein static), wir an deinem Beispiel jetzt vielleicht nicht so ganz klar, denn in beiden Fällen (egal ob nun static, oder nicht) landet der gleiche String in deinem "String otherStuff".

Trotzdem ne Erklärung:
Wenn du in einer anderen Klasse ein Objekt vom Typ InternerMethodenAufruf erstellst (sei dieses Objekt "intMethObj" genannt, dann wirst du in deiner Zeile 14 (bei Benutzung von "this.createSth()"), den String bekommen, den du "über das Objekt" in createSth() erstellt hast.

Im anderen Fall, erstellst du eben auch einen String in createSth(), aber wenn du das als statische Methode machst, so passiert das unabhängig von deinem Objekt "intMethObj"...

Besseres Beispiel:
1. Fall.) Stell dir vor du hast in deiner Klasse eine Variable "public String name". Beim erstellen eines Objekts deiner Klasse in einer anderen Klasse z.b. rufst du deinen definierten Konstruktor auf: InternerMethodenAufruf intMethObj = new InternetMethodenAufruf("Heinz"); Jetzt stelle dir vor anstatt von deinem "createSth()" hast du eine andere Methode "getName()"... diese returned den Namen. Dann hast du bei einem Aufruf von Typ 14... mit this.getName() den String "Heinz".

2.Fall.) Sei der public static String name; nun als "static" definiert. Dann kannst du in einer anderen Klasse z.b. sagen "InternerMethodenAufruf.name = "Herbert", und das ohne irgendein Objekt. Wenn du nun noch deine Methode "static getName()" definierst, dann bekommste in Zeile 14 mit dem code: "InternerMethodenAufruf.getName()" den String "Herbert" zurück und der landet in "String otherStuff" gespeichert - und du hast kein Objekt erstellen müssen .

Ansonsten siehe auch:
http://www.java-forum.org/stichwort-static/1353-bedeutet-static.html


----------



## wizdom (10. Jun 2012)

ok, vielen dank ihr beiden


----------

