Für was steht static bzw. ab wann nimmt man es?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Static heißt statisch und kommt immer dann zum Einsatz, wenn Programmstrukturen (Attribute oder Methoden einer Klasse) nicht an die Instanzen eines Objektes gebunden sind. Bei den Attributen spricht man dann von Klassenattributen. Das Gegenteil davon sind Objektattribute, welche ohne das Schlüsselwort static implementiert werden. Diese können nur zusammen mit einer Objektinstanz aufgerufen werden.

Erstellst du beispielsweise eine Klasse Auto und implementierst Attribute wie die Marke oder die Leistung, dann sind das nicht-statische Objektattribute, denn sie können je nach Objektinstanz/Auto variieren und sind somit an die jeweilige Instanz gebunden.

Die getter-Methode, welche dir nun die Leistung des Fahrzeugs zurückgibt, implementierst du dann gleichermaßen. Statische Attribute holst du dir also über eine statische getter-Methode, nicht-statische Attribute holst du über eine nicht-statische getter-Methode.

So könnte eine einfache Klasse Auto aussehen. Vorerst haben wir keine statischen Attribute oder Methoden:

public class Auto
{
  private String marke;
  private double leistungInPs;

  public Auto(String marke, int leistungInPs)
  {
    this.marke = marke;
    this.leistungInPs = leistungInPs;
  }

  public void setMarke(String marke)
  {
    this.marke = marke;
  }

  public String getMarke()
  {
    return this.marke;
  }

  public void setLeistungInPs(double leistungInPs)
  {
    this.leistungInPs = leistungInPs;
  }

  public double getLeistungInPs()
  { 
    return this.leistungInPs;
  }
}  

Ein Beispiel für eine statische Methode der Klasse Auto könnte eine Methode sein, welche dir die Leistung umrechnet, also einmal von PS in kW (Kilowatt) und anders herum. Man kann sie sowohl statisch als auch nicht-statisch implementieren. Die Frage ist hier, wie man es haben möchte.

Fall 1: non-static
Möchte man eine Methode, die automatisch die Leistung der Objektinstanz aufruft und in der anderen Einheit zurückgibt? Dann greift sie auf ein nicht-statisches Attribut zu und darf demnach auch nicht statisch sein.

public double getLeistungInKw()
{
  //1kW entsprechen ca. 1,36PS
  return this.leistungInPs / 1.36;
}

Diese Methode kann erst aufgerufen werden, wenn man vorher ein Auto mit dem new-Operator erzeugt hat.

public static void main(String[] args)
{
  Auto vw= new Auto("vw", 102.0);
  System.out.println("Leistung in kW: " + vw.getLeistungInKw());
}

Fall 2: static
Möchte man eine Methode, die unabhängig von einer Objektinstanz eine Zahl, welche wir als Parameter übergeben, in die andere Einheit umrechnet, dann müssen wir das Schlüsselwort static in dem Methodenkopf verwenden. Das könnte man z.B. tun, wenn der Nutzer der Anwendung ggf. die Leistung seines Autos umrechnen möchte, ohne, dass er das Auto erst komplett erfassen muss.

public static double berechnePsNachKw(double leistungInPs)
{
  //1kW entsprechen ca. 1,36PS
  return leistungInPs / 1.36;
}

Diese Methode kann man nun auch aufrufen, ohne vorher ein Auto mit dem new-Operator erzeugt zu haben.

public static void main(String[] args)
{
  System.out.println("Leistung in kW: " + Auto.berechnePsNachKw(150.0));
}

Static wird benutzt, wenn die Methode oder Struktur ohne dazugehöriges Objekt aufgerufen werden kann