wann benutzt man static und wann nicht in Java?

5 Antworten

static nutzt du, wenn ein Attribut oder eine Methode einer Klasse ohne dessen instanzierunfg benutzt werden soll. Beispiel:

Die Klasse Tier hat eine static Funktion, welche alle ihre Funktionsnamen in die Konsole schreibt. Dann kannst du einfach Tier.print(); machen

Woher ich das weiß:Hobby – Programmiere in meiner Freizeit, hauptsächlich in C

Zunächst ist es wichtig, das grundsätzliche Konzept der OOP zu verstehen: Anhand von Objekten, die einen Zustand abbilden und untereinander agieren, wird ein System beschrieben. Klassen dienen in diesem System als die Baupläne von Objekten.

Ein einfaches Beispiel wäre die Beschreibung eines Verkehrsystems. In dem gibt es beispielsweise mehrere Verkehrsteilnehmer, die jedoch unterschiedlich agieren und sich unterschiedlich beschreiben lassen. Es könnte hier Klassen für Autos, Fahrräder und Passanten geben, doch auch diese Instanzen (Objekte) können individuell sein. Nicht jedes Auto ist gleich groß oder gleich schnell. Während ein Auto vielleicht gerade parkt, fährt ein anderes Auto.

All diese individuellen Eigenschaften und Verhaltensweisen werden mittels objektgebundener Elemente beschrieben.

Beispiel:

class Car {
  public float velocity;
  public Color color;
}

Car car1 = new Car1();
car1.velocity = 50;
car1.color = Color.red;

Car car2 = new Car2();
car2.velocity = 10;
car2.color = Color.blue;

Alle Elemente, die du nun als statisch kennzeichnest, sind nicht objekt-, sondern klassengebunden. Sie sind somit für alle Objekte der Klasse gleich. Wäre das Feld color im oberen Beispiel statisch und würde auf Color.yellow gesetzt werden, wären alle Autos sofort gelb. Bekannt muss dafür auch nur der Klassenname sein.

class Car {
  public static Color color;
}

Car car1 = new Car1();
Car car2 = new Car2();
Car.color = Color.yellow; // all cars are yellow now

Klassengebundene Elemente sind dann nützlich, wenn Eigenschaften/Verhaltensweisen implementiert werden sollen, die sich nicht von Objekt zu Objekt unterscheiden können.

Static trennt hauptsächlich die Klasse und die Instanz.

Static Methoden können zB ganz ohne Klasseninstanz aufgerufen werden. Sie können daher aber auch nur auf static Variablen zugreifen und nicht auf Instanzvariablen in der Klasse.

Static Variablen sind der Klasse zugeordnet nicht der Instanz. Sie können daher von allen Instanzen dieser Klasse parallel verwendet werden.

class Printer
  public static int i = 0;
  void print()
      System.out.println(i);

Printer print1 = new Printer();
print1.i = 10;
Printer print2 = new Printer();
print2.print();

Das Programm gibt 10 aus obwohl i in print1 geändert wird. Eben weil i der Klasse printer und nicht der Instanz zugeordnet ist.

Allerdings musst du damit aufpassen, das führt sehr leicht zu fehlern. Also ob eine static Methode oder Variable verwendet wird muss eben wohl überlegt sein und im Zweifelsfall sollte man sie nicht verwenden.

Man benutzt es nie!

Unabhängig davon: Jo cool, deshalb funktionieren Apps und Programme im Internet und auf dem Handy nie richtig, weil die Entwickler nicht wissen, was sie tun :)

So nach dem Motto: Wenn es funktioniert, ist es ok, unabhängig davon ob man es versteht oder nicht.

Coole Einstellung. Hoffentlich kommt bald die künstliche Intelligenz :)

DavidGoggins 
Fragesteller
 01.08.2023, 10:19

was ist jetzt dein problem, ich bin kein entwickler...

0
Kelec  01.08.2023, 10:36

Natürlich hat static auch einen Nutzen.

Man muss eben nur aufpassen wie und wo man es verwendet und sollte damit nicht die Objektorientierung untergraben.

0
TheMinerH  01.08.2023, 17:55

Natürlich benutzt man es. Sonst würde man für Methoden die komplett unabhängig von Objekten sind trotzdem ein Objekt instanziieren müssen, was keinen Sinn ergibt.

1

Setze dich mit der Objektorientierten Programmierung auseinander, dann verstehst du den Unterschied. Lernmaterial dazu gibts im Internet zur genüge.

Woher ich das weiß:Berufserfahrung – Informatiker Applikationsentwicklung