Klassen und Objekte
Nichtstatische Klassen
Instanziieren von Klassen
Statische Klassen
Startklassen
Definition von Klassen
In Java ist jedes Objekt ein Ding, was etwas ist (das heißt: es hat eine unveränderliche Identität, mit der es von allen anderen Objekten unterscheidbar ist), etwas hat (das heißt: es besitzt gewisse Eigenschaften) und etwas kann (das heißt: zu ihm gehören bestimmte Methoden). Man kann sich dieses konkret etwa an einem Ball veranschaulichen: Ein Ball hat eine bestimmte Form, eine gewisse Größe, eine Farbe, eine charakteristische Oberfläche, ... und er kann rollen, man kann ihn mit dem Fuß wegschießen, mit der Hand werfen, er kann verformt werden, er kann kaputt gehen, ...
Die gemeinsamen Eigenschaften und Methoden gleichartiger Objekte werden innerhalb einer nichtstatischen Klasse definiert. Nichtstatische Klassen kann man sich als eine Art Schablone oder Bauplan zur Erzeugung von Objekten vorstellen. Ist etwa Example eine solche Klasse, dann besitzt Example (mindestens) einen Konstruktor, mit dessen Hilfe Objekte vom Typ Example hergestellt werden können. Ein mit einem Konstruktor erzeugtes Objekt nennt man eine Instanz der jeweiligen Klasse.
Die Möglichkeit (und Notwendigkeit) im Quellcode eines Java-Programms instanziierbare Klassen zu definieren, ist die Voraussetzung dafür, zwischen theoretischem Konzept und konkreter Umsetzung strikt unterscheiden zu können, kurzum: die Programmiersprache Java ermöglicht Abstraktion. Erst mit einem Objekt, also einer Instanz einer Klasse, werden die abstrakt definierten Bestandteile der Klasse realisiert.
Die Eigenschaften einer Instanz obj einer Klasse heißen Attribute. Jedes Attribut wird in der Definition der Klasse durch eine Variable von geeignetem Typ oder durch ein geeignetes Objekt (innerhalb von obj) repräsentiert. Die Gesamtheit der in diesen Variablen gespeicherten Werte zusammen mit allen innerhalb von obj vorhandenen Objekten und deren aktuellen Eigenschaften bestimmen den jeweiligen Zustand des Objektes obj.
Die Instanz einer Klasse ist durch ihre Attribute und ihre Methoden vollständig charakterisiert.
In der Programmzeile
Example example = new Example();
ist example der Bezeichner einer Variablen, welche auf das durch den Konstruktor Example() der Klasse Example erzeugte Objekt verweist. Vornehm ausgedrückt: Das neu erzeugte Objekt wird durch die auf es zeigende Variable referenziert. Mittels der Referenzvariable example kann man das zugehörige Objekt „ansprechen“. (Ein Objekt kann durchaus mehrere Referenzen haben.)
Die eben erklärte Programmzeile ist eine Zusammenfassung der folgenden zwei Programmzeilen und beinhaltet genau genommen drei Dinge:
// Deklarieren der Referenzvariable example:
Example example;
// Instanziieren der Klasse Example;
// Referenzieren des erzeugten Objektes durch example:
example = new Example();
Statische Klassen sind Klassen, die nicht instanziiert werden können. Das bedeutet, dass der Aufruf einer Methode und der Zugriff auf ein in einer solchen Klasse definiertes Attribut nur über die Klasse selbst erfolgen kann. Kurzum: alle Methoden einer statischen Klasse sind Klassenmethoden und alle Attribute einer statischen Klasse sind Klassenattribute. Klassenmethoden und -attribute werden unter Benutzung des Schlüsselwortes static deklariert (vgl. Definition von Methoden).
Mit der statischen Klasse Math stehen Methoden zur Verfügung, mit denen mathematische Berechnungen möglich sind. Die statische Klasse System besitzt den PrintStream out, der es ermöglicht, mit seinen Methoden print() und println() Zeichenketten und Werte von Variablen in einem Konsolenfenster auszugeben (→ Javaprojekt HelloWorld). Der InputStream System.in ist unter anderem zuständig für Eingaben über die Tastatur.
„Startklasse“ soll diejenige Klasse eines Javaprojekts genannt werden, die die Methode main beinhaltet und mit dieser dafür sorgt, dass das mit diesem Projekt vorhandene Programm gestartet werden kann. Es darf in jedem Projekt nur eine einzige Startklasse geben.
Grundsätzlich kann jede Klasse eines Projekts durch Hinzufügen der Methode main zur Startklasse gemacht werden. Allerdings ist es in diesem Tutorial so, dass die Startklasse des jeweiligen Projekts (deren Namen stets zum Projektnamen identisch ist) neben dem Start des Programms keine andere Aufgabe hat.
Die Definition einer Klasse beginnt (mindestens) mit dem Schlüsselwort class, unmittelbar gefolgt vom Klassennamen. Der Klassenname muss ein zulässiger Bezeichner sein, der zudem mit einem Großbuchstaben beginnen sollte. Vor class stehen gegebenenfalls Modifikatoren, mit denen Eigenschaften dieser Klasse festgelegt werden. Handelt es sich bei einer Klasse Example um die Subklasse einer bereits vorhandenen Klasse SuperExample, so folgt auf den Klassennamen extends SuperExample. Im Falle, dass die Methode(n) eines Interface namens InterfaceExmpl implementiert werden sollen, wird noch implements InterfaceExmpl hinzugefügt. Schließlich folgt innerhalb von geschweiften Klammern die Definition der Attribute sowie Methoden der Klasse. Ein formales Beispiel:
public class Example extends SuperExample {
// Definition von Variablen
...
// Definition von Methoden
...
}