Jetzt lerne ich Java 6

Sichtbarkeit von Variablen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Für Anfänger ist das Konzept der Sichtbarkeit von Variablen in Java schwer zu durchschauen. Auf den ersten Blick macht es die klare Trennung in Java leichter als zum Beispiel in JavaScript, doch gibt es auch hier Mittel und Wege, globale Werte zu deklarieren.
07:15

Transkript

Ein für den Anfänger innerhalb von Java nicht ganz so durchschauendes Konzept ist die Sichtbarkeit von Variablen und Eigenschaften. Daher möchte ich diesen Film dazu nutzen. Ich habe hier in unserem Projekt noch eine Klasse Sichtbarkeit angelegt. Diese Klasse ist separat vom Projekt zu betrachten. Und ich werde diese auch gleich separat bergen und auch ausführen lassen. Daher besitzt diese Klasse auch eine eigene main-Methode. Es gehört einfach nur zu diesem Projekt "objektorientierte Programmierung" dazu. Daher habe ich es hier darinnen gelassen. Zudem habe ich in dieser Klasse hier zweimal "static" verwendet. Static ist dafür zuständig, dass man auch ohne eine Instanz dieser Klasse auf Eigenschaften zugreifen kann oder auch auf Methoden. Dies hat jedoch zur Funktionalität, die ich Ihnen jetzt zeigen möchte, keinerlei Einfluss. Daher bitte ignorieren Sie das Vorkommen von static an dieser Stelle. Nun aber zu dem, was ich Ihnen zeigen möchte. Stellen wir uns vor, dieses Programm läuft. Wir definieren hier in unserer ersten Programmzeile eine String-Variable mit dem Namen "Text" und der Inhalt heißt: "Hello World" und lassen in der nächsten Zeile, 'ner Zeile 26, mit dem vorangestellten Text "Inhalt draußen: "Hello World" ausgeben. Anschließend rufen wir unsere Methode auf und übergeben Text an diese Methode. Diese Methode steht hier, geht nichts zurück, heißt "Methode" und nimmt diesen Text entgegen, endet diesen Text in "Good night world" und gibt diesen dann mit der Einleitung "Inhalt drinnen" aus. Die interessante Frage nun an Sie ist - nachdem die Methode abgelaufen ist, stehen wir wieder hier und hier steht eine Zeile "Inhalt draußen" + text. Was wird hier wohl ausgegeben werden? Nun haben Sie es versucht, herauszufinden? Ich zeige es Ihnen. Um dies jetzt zu kompilieren und nur diese Klasse ausführen zu lassen, nicht das ganze Projekt, werde ich jetzt Shift F6 verwenden. Und wir sehen, wir bekommen zuerst "Hello World", wie wir es erwartet haben innerhalb der Methode "Good night world", und "Inhalt draußen: wieder "Hello World". Warum das? Nun. Jede Methode bringt seine lokale Variable mit. Die Regel innerhalb von Java heißt - wenn Variablen innerhalb einer Methode deklariert werden, sind diese nur innerhalb der Methode sichtbar, außerhalb der Methoden sind ist unsichtbar. Das heißt, wenn wir hier eine Variable "text" ins Leben rufen, gilt diese als lokale Variable für die Methode "main". Um bei unserer Schubladen-Metapher zu bleiben, wenn wir eine Schublade "text" innerhalb von "main" gründen, steckt diese Schublade "text" im main-Schrank. Wenn wir eine Schublade "text" hier gründen, innerhalb der Methode "methode" (oder "Methode"), dann steckt diese Schublade innerhalb des Methoden-Schranks. Sie hat zwar die gleiche Beschriftung "text", aber die eine Schublade steckt eben im main-Schrank, die andere im Methoden-Schrank: zwei unterschiedliche Schubladen. Und daher können Sie hier auch hineinlegen, was Sie wollen. Denn es wird ja nur die Schublade aus Methode geändert, nicht die Schublade aus "main". Und dementsprechend hat hier diese Zeile immer noch den alten Inhalt der Schublade. Daher wird hier auch beim Aufruf der Methode ein Übergabeparameter definiert. Denn das ist die einzige Chance, einen Wert aus dieser Schublade hier in diese Schublade hier hineinzubekommen, über den Übergabeparameter. Sie erinnern sich an "Call by Value". Das Ganze geht soweit, dass wir jetzt hier folgende kleine Änderung machen könnten. Ich nehm hier mal "text" beim Aufruf aus und ebenfalls auch hier aus, als Parameter. Wir bekommen nach kurzer Zeit hier einen sehr heftigen Fehler. Hier meldet nämlich Java, dass die Variable "text" überhaupt nicht vorhanden ist. Auf gut Hochdeutsch - die Schublade "text" existiert in Methode nicht. Na klar, wir haben ja auch keine angelegt. Das heißt, anders als in Sprachen wie zum Beispiel JavaScript, wo Sie jetzt, wenn Sie hier keine eigene angelegt haben, automatisch auf eine globale Schublade "text" zugreifen, existiert dieses Konzept in Java nicht. Hier ist es definitiv so, dass hier diese Abschnitte, diese Codeblöcke, die Methoden voneinander wirklich getrennt sind. Und daher können Sie nur über Übergabeparameter arbeiten. Diesen Satz werd' ich jetzt gleich noch ein kleines bisschen relativieren. Denn er ist so noch nicht ganz korrekt und das möchte ich Ihnen gerne zeigen. Es gibt schon einen Weg. Ähnlich wie auch in JavaScript, eine globale Variable zu definieren und das haben wir sogar schon getan. Die Eigenschaften einer Klasse, die sind global. Das liegt da dran, dass diese nicht innerhalb von Methoden definiert werden, sondern nur innerhalb der Klasse. Daher müssen wir darauf achten, dass sie nicht innerhalb irdendeiner dieser Methoden stehen, sondern hier oben deklariert werden. Wenn sie hier oben deklarieret werden, sind sie in allen Methoden gleichzeitig sichtbar, unter dem Namen "Eigenschaft". Das bedeutet, wenn ich hier unten in der Methode stehe, kann ich hier auch problemlos die Eigenschaft ausgeben lassen. Sie ist sofort vorhanden. Das einzige Problem, das wir noch lösen müssen, ist - was passiert, wenn wir in einen Namenskonflikt wandern? Ich könnte ja hier in 'ne Methode hingehen und einen String Eigenschaft hier anlegen. Wir bekommen hier jetzt plötzlich die Aussage, dass wir Eigenschaft gegebenenfalls überhaupt nicht initialisiert haben. Das hatten wir eben nicht. Ich setze Eigenschaft jetzt hier oben mal auf "Ich bin lokal". Wenn wir das jetzt ausgeben lassen, bekommen wir auch die Aussage "Ich bin lokal". Das heißt, sobald wir hier jetzt eine Schublade mit dem Namen "Eigenschaft" anschaffen, sehen wir hier unten auch augenblicklich diese Schublade. Vorhin als wir das noch nicht getan haben - ich kommentier' es noch mal kurz aus, und lass es nun ausführen - sagen wir hier aber: unsere globale Eigenschaft der Klasse - Hallo, mit Inhalt hier oben. Das heißt, wir können in einen Namenskonflikt geraten. Mit diesem Namenskonflikt kann man jedoch umgehen, und das habe ich Ihnen bereits in einem der vorhergehenden Filme ganz kurz gezeigt und möchte es hier einfach noch mal wiederholen. Wenn wir einen solchen Namenskonflikt haben, grundsätzlich verwendet Java zuerst einmal die lokale Variable. Wenn Sie jetzt jedoch nicht die Eigenschaft, also die Schublade, die Sie hier drinnen definiert haben, meinen, sondern die globale, die Klassenvariable hier oben, genügt es, wenn Sie hier vor Eigenschaft das Schlüsselwort "this" davor fügen, einen Punkt setzen. Damit wird grundsätzlich die Instanz, in der wir uns befinden, angesprochen. Und damit können wir dann auch die Eigenschaft ausgeben. In meinem Fall, hier bekomme ich jetzt einen Fehler, da wir in Wirklichkeit gar keine Instanz haben und die ganze Zeit in einer Klasse arbeiten. In der Praxis jedoch ist das für Sie der Weg, wie Sie auf eine entsprechende Eigenschaft kommen können, auch wenn Sie lokal diese Eigenschaft überdeckt haben.

Jetzt lerne ich Java 6

Steigen Sie ein in die Programmierung mit Java 6, lernen Sie die Grundlagen kennen und unternehmen Sie anschließend Ihre ersten Schritte in der objektorientierten Programmierung.

12 Std. 27 min (98 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!