Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Java 7 Grundkurs

Das Schlüsselwort "static"

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Das Schlüsselwort "static" deklariert Klassenvariablen und Klassenmethoden – diese sind damit nicht objektabhängig. Was das bedeutet, vermittelt Ihnen der Autor an diesem Beispiel.
08:16

Transkript

Was es mit dem Schlüsselwort "Static" auf sich hat, erfahren Sie in diesem Video. Wenn wir in einer Java-Klasse Attribute und Methoden deklarieren, dann bekommt jede Instanz dieser Klasse, jedes Objekt, das wir erzeugen, einen eigenen Satz davon. Schauen wir uns z. B. diese Klasse "Auto" an. In dieser Klasse ist ein Attribut "Name" deklariert und zwei Methoden: "Get Name" und "Set Name". Darunter sehen wir zwei Objekte, die Instanzen dieser Klasse sind. Beim linken Objekt hat das Attribut "Name" den Wert "Klaus", und beim rechten Obkjekt hat das Attribut "Name" den Wert "Peter". Wenn ich jetzt den Namen des linken Autos ändere, dann bleibt der Name des rechten Autos natürlich derselbe. Gehe ich zum linken Objekt und rufe die Methode "Get Name" auf, dann bekomme ich den Wert des linken Attributes "Name", nämlich "Klaus", und gehe ich zum rechten Auto und rufe dieselbe Methode auf, dann bekomme ich den Wert "Peter". So funktionieren Objekte. Nun gibt es in Java auch die Möglichkeit, dass ich ein Attribut auch an die Klasse hängen kann. Dort gibt es nun ein zusätzliches Attribut "Anzahl". Dieses Attribut gehört nicht einem bestimmten Objekt, sondern alle Objekte teilen sich dieses Attribut. Egal wie viele Exemplare der Klasse "Auto" ich erzeuge, es wird immer nur ein Attribut "Anzahl" geben. Wenn eines der Auto-Objekte diese Variable ändert, dann ändert sie sich auch für alle anderen Objekte. Das Gleiche lässt sich auch mit Methoden machen. Ich habe jetzt hier eine zusätzliche Methode "Get Anzahl". Auch diese Methode gehört nicht einem speziellen Objekt, sondern sie gehört zur Klasse. Das hat u.a. den Effekt, dass ich auch um diese Methode aufzurufen, nicht zu einem bestimmten Objekt gehe, zu einer Instanz dieser Klasse, sondern zur Klasse selbst. Jetzt zeige ich Ihnen, wie das im Quelltext aussieht. Ich verwende dazu die Klasse "Auto" aus dem Beispielprojekt "Autos". Sie können das Ganze aber auch mit einer leeren, neuen Klasse ausprobieren; das funktioniert genauso. In dieser Klasse hier befinden sich bereits zwei Attribute, nämlich "Geschwindigkeit" und "Name" und eine Menge Methoden, die beschreiben, was das Auto so kann. Fügen wir hier nun das Attribut "Anzahl" hinzu. Ich deklariere es als "Private", und jetzt folgt das Schlüsselwort "Static" das es zu einem Klassen-Attribut macht, danach der Typ "Int" und der Name der Variablen "Anzahl". Um eine Methode zu einer Klassen-Methode zu machen, nehmen wir ebenfalls das Schlüsselwort "Static". Ich füge diese Methode mal hier unter den Konstruktoren ein. "Public Int Get Anzahl" diese Methode liefert einfach Anzahl zurück, also "Return Anzahl". Und damit es eine Klassenmethode wird, damit es eine "Static"-Methode wird, muss ich natürlich "Static" davor schreiben. Über diese Variable "Anzahl" möchten wir gerne erfahren können, wieviel Auto-Objekte in diesem Programm bereits erzeugt wurden. D. h., jedes Mal, wenn ein neues Objekt erzeugt wird, dann muss ich diese Variable um eins hochzählen. Objekte werden erzeugt, indem der "Constructor" aufgerufen wird, also mache ich das im Konstruktor. Ich zähle "Anzahl" um "1" hoch. Jedesmal wenn ich nun ein neues Auto-Objekt erzeuge, dann wird also diese Variable "Anzahl" um "1" hochgezählt. Und da sich alle Objekte dieselbe "Anzahl"-Variable teilen, wird also auch immer dieselbe Variable hochgezählt. Im Ergebnis enthält "Anzahl" tatsächlich die Anzahl der bisher erzeugten Auto-Objekte. Das müssen wir jetzt natürlich auch noch testen. Dazu brauchen wir eine Klasse mit einer Main-Methode, damit wir das Programm auch ausführen können. Ich füge also eine neue Klasse hinzu. Das mache hier oben in meinem Package "Autos": rechte Maustaste, "New", "Java-Class", und ich nenne diese Klasse "Anzahl" es geht ja um die Anzahl der Autos, die ich hier testen möchte. "Finish", nun ist die Klasse da. Jetzt muss ich eine Main-Methode hinzufügen: "Public", "Static", "Void", "Main", Tabulatortaste, wir haben unsere Main-Methode. Wie bereits erwähnt, kann ich solche Static-Methoden direkt über den Namen der Klasse aufrufen. D. h., ich könnte mir jetzt schon mal die Anzahl der erzeugten Objekte anzeigen lassen. Da müsste ja dann eigentlich "0" rauskommen. Also: "System.out.printline" oder "S-Out" und Tabulatortaste, Anzahl vorher und jetzt im Namen der Klasse ein Punkt. Und dann sehen wir hier: die einzige Methode, die wir aufrufen können, heißt offensichtlich "Get Anzahl". Drücke ich also einfach "Enter", und da sich diese Klasse "Auto" in einem anderen Package befindet, wird hier oben auch gleich der der passende Input eingefügt. Jetzt erzeugen wir mal zwei Autos. Das erste Auto nennen wir "Klaus", und das zweite Auto nennen wir "Peter". Jetzt haben wir zwei Autos erzeugt. Und jetzt lassen wir uns nochmal die Anzahl ausgeben. Wenn Sie jetzt mit Strg+C, Strg+V hantieren, weil Sie der Meinung sind: Das ist ja fast die gleiche Zeile wie da oben, können Sie es auch noch einfacher haben. Sie gehen einfach in diese Zeile, und dann drücken Sie Strg+Shift+Pfeil runter, dann wird die Zeile kopiert. Mit Alt+Shift+Pfeil runter kann ich die Zeile dann verschieben. Jetzt muss ich nur noch meine Änderungen vornehmen, nämlich "Nachher" statt "Vorher", der Rest bleibt ja der Gleiche. Alles brav speichern und dann diese Klasse ausführen. Da ich mehrere Main-Klassen in meinem Projekt habe, aber sichergehen möchte, dass ich diese ausführe, klicke ich nicht hier oben auf den grünen Pfeil, sondern ich klicke mit der rechten Maustaste in diese Klasse hinein und sage hier "RunFile". Dann sehen wir hier unten die Ausgabe: "Anzahl Vorher 0", "Anzahl Nachher 2". Es funktioniert also tatsächlich. Es ist Ihnen vielleicht bereits aufgefallen: Auch die Main-Methode hat hier das "Static" davor stehen. Jetzt ist Ihnen vielleicht etwas klarer, warum. Der Interpreter muss ja diese Main-Methode aufrufen, damit das Programm losgeht. Und dazu bekommt er lediglich diese Klasse übergeben, oder genauer: den Namen der Klasse. Wäre die Main-Methode nicht "Static", dann müsste er zuerst einmal ein Objekt erzeugen, bevor er die Main-Methode aufrufen könnte. Welches Objekt er erzeugen soll und wie das geht, wüsste er aber erst, wenn er bereits in der Main-Methode drin wäre. Das Ganze würde sich also im Kreis drehen. Da Main aber "Static" ist, kann er einfach "Anzahl Main" aufrufen und damit das Programm starten. Da solche "Static"-Methoden an der Klasse hängen, haben sie noch eine weitere Eigenheit. Ich kann in ihnen nicht auf Instanzvariablen zugreifen, also auf normale Variablen wie z. B. "Name". Ich versuche das mal. Ich versuche hier bei "Get Anzahl" noch eine kurze Statusmeldung einzubauen, z. B. um zu sehen, welches der Objekte denn nun gefragt wurde nach dieser Anzahl. Und wenn ich das versuche ... Ich komme gar nicht dazu, das Programm auszuführen. Ich bekomme nämlich einen Compiler-Fehler. Wir sehen das hier: "Nicht-statische Variable. Kann nicht aus einem statischen Kontext aufgerufen werden". Auf deutsch heißt das, die Variable "Name" hängt an einem einzelnen Objekt, die Methode "Get Anzahl" hängt aber hier oben an der Klasse. Und ich könnte diese "Get Anzahl" mit "HolDir" sogar aufrufen, ohne dass es auch nur eins dieser Objekte gibt, das haben wir gerade gesehen. Ich kann also auf "Name" nicht zugreifen, weil es entweder noch gar keinen gibt, oder aber mehrere davon. So wie hier auf diesem Bild. Und dann wäre ja gar nicht klar, welchen dieser Namen ich eigentlich meine. Umgekehrt könnte ich in einer normalen Methode durchaus auf statische Variablen zugreifen. Denn wenn ein einzelnes Objekt erzeugt wurde, dann gibt es ja die Klassen-Attribute und Klassen-Methoden bereits vorher schon. Ein Objekt könnte sich also melden mit: Ich bin der Dritte, und: Ich bin der Vierte, indem es jeweils die gemeinsame Variable "Anzahl" ausliest. Nehme ich also diese Zeile hier gleich wieder weg. Strg+E macht das für mich. Sie haben nun gesehen, dass man mit "Static" Klassen-Variablen und Klassen-Methoden deklarieren kann. Diese hängen nicht am einzelnen Objekt, sondern an der Klasse und können deshalb auch über den Namen der Klasse direkt aufgerufen werden. Wenn eine Methode in einer Klasse als "Static" deklariert ist, dann kann ich in ihr auch nur auf "Static"-Variablen zugreifen, nicht aber auf die normalen Attribute.

Java 7 Grundkurs

Machen Sie sich mit den Grundlagen der Java-Programmierung vertraut und lernen Sie die Syntax der Sprache sowie das Konzept der objektorientierten Softwareentwicklung kennen.

8 Std. 32 min (66 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!