Datenfelder, die mit dem Schlüsselwort static deklariert werden, heißen Klassenvariable. Sie existieren pro Klasse genau einmal (unabhängig von der Zahl der kreierten Instanzen) und alle Objekte dieser Klasse können auf sie zugreifen.
Ein Datenfeld, welches ohne das Schlüsselwort static deklariert wird, ist eine sogenannte Instanzvariable. Eine Instanzvariable existiert je Instanz (also je Objekt) genau einmal und kann entsprechend für jede Instanz einen anderen Wert annehmen. Eine Instanzvariable stellt sozusagen eine Eigenschaft eines Objektes dar.
Hinweis: Variablen, die innerhalb einer Methode deklariert werden, bezeichnet man als lokale Variablen.
Die Sichtbarkeit von (Instanz- und Klassen-) Variablen und Methoden wird mit Hilfe von Modifiern geregelt. Ist ein Element einer Klasse mit keinem der Schlüsselworte public, private oder protected deklariert, dann ist es nur innerhalb von Klassen desselben Pakets sichtbar.
Unter einem Paket versteht man alle Klassen, die in einem bestimmten Verzeichnis liegen. Sinnvollerweise werden logisch zueinander gehörige Klassen in ein Verzeichnis gepackt. Diese Verzeichnisse werden wiederum logisch zusammengehörig in weitere Verzeichnisse geschachtelt, so dass eine ganze Verzeichnisstruktur entsteht. Nach Java-Konvention sollten die Paketnamen (und damit die Verzeichnisse) immer klein geschrieben sein.
Das Standardpaket besteht aus allen Klassen im aktuellen Arbeitsverzeichnis. Eigene Pakete können beispielsweise angelegt werden, indem man
package a.b.c;am Anfang einer Klasse schreibt und diese Klasse auch in dem angegebenen Pfad a/b/c ablegt. Eine so definierte Klasse kann nach dem Übersetzen durch
java a.b.c.MeineKlasseaufgerufen werden, wobei der Aufrufer sich in dem Verzeichnis befindet, welches das Verzeichnis a enthält.
Die Klasse MeineKlasse kann von anderen Klassen durch
import a.b.c.MeineKlasse;importiert werden.
Die folgende Tabelle zeigt die Umstände, unter denen Klassenelemente der vier Sichtbarkeitstypen für verschiedene Klassen erreichbar sind.
Erreichbar für: | public | protected | paketsichtbar | private |
Dieselbe Klasse | ja | ja | ja | ja |
andere Klasse im selben Paket | ja | ja | ja | nein |
Subklasse in anderem Paket | ja | ja | nein | nein |
Keine Subklasse, anderes Paket | ja | nein | nein | nein |