Ganz grundsätzlich werden bei der Programmierung (auch: Implementierung) drei verschiedene Aktivitäten durchgeführt:
Kann das Schreiben des Programmcodes noch mithilfe eines ganz einfachen Texteditors geschehen, so wird spätestens beim Kompilieren eine Software benötigt, die den vom Entwickler geschriebenen Programmtext in ausführbaren Maschinencode übersetzt (auch: kompiliert). Diese Übersetzungssoftware heißt "Compiler". Es gibt Compiler für jede Progammiersprache. Nachdem der Programmtext durch den Compiler kompiliert wurde, kann er in einer Ausführungsumgebung (auch: Runtime) gestartet und ausgeführt werden. Für viele Programmiersprachen stellt das Betriebssystem eines PCs (z.B. Windows, Linux, MacOS) die Ausführungsumgebung bereit. Da sich die Funktionen und Eigenschaften von Betriebssystemen unterscheiden, müssen Programme für jedes Betriebssystem neu programmiert beziehungsweise kompiliert werden.
Die Abbildung zeigt exemplarisch alle benötigten Elemente für die Entwicklung mit der Programmiersprache C:

Bei der Programmiersprache Java handelt es sich um eine plattform-unabhängige Programmiersprache. Ein in Java geschriebenes
Programm muss nicht für jedes Betriebssystem neu angepasst werden. Von anderen Programmiersprachen unterscheidet sich
Java dadurch, dass auf den Geräten, auf denen ein Java-Programm ausgeführt werden soll, vorher eine "Java-Laufzeitumgebung"
(auch: Java Runtime Environment, kurz: JRE) installiert werden muss. Der Java-Compiler übersetzt den programmierten
Quelltext in einen sogenannten "Bytecode". Dieser Bytecode wird dann von der Java-Laufzeitumgebung geladen, gestartet und
ausgeführt. Weil für nahezu jedes Betriebssystem eine entsprechende Java-Laufzeitumgebung verfügbar ist, kann
ein Java-Programm sowohl auf einem Linux-, Windows- oder Mac-Rechner ausgeführt werden.

Um als Nutzer ein Java-Programm ausführen zu können, wird die Java-Runtime (JRE) benötigt. Die Java-Runtime besteht aus der Java Virtual Machine (kurz: JVM) und der Java-Klassenbibliothek. Die JVM ist die Software, die den Bytecode interpretiert sowie im eingesetzten Betriebssystem startet und ausführt. Die Java-Klassenbibliothek stellt bereits in der Programmiersprache Java vorhandene Funktionen zur Verfügung, sodass häufig eingesetzte Datenstrukturen (z.B. Listen oder Zeichenketten) vom Programmierer zwar wiederverwendet werden können, jedoch nicht jedes Mal neu implementiert werden müssen.
Um als Software-Entwickler in der Programmiersprache Java Software zu entwickeln, wird ein Java Software Development Kit (kurz: Java SDK) benötigt. Das Java SDK besteht aus einem Java-Compiler, einer Java Virtual Machine, der Java-Klassenbibliothek sowie weiteren Hilfsprogrammen.
Für die Entwicklung werden sogenannte Entwicklungsumgebungen (auch: Integrated Development Environment, kurz: IDE) eingesetzt, beispielsweise Eclipse, IntelliJ oder NetBeans.
Eine Klasse in der Programmiersprache Java hat einen eindeutigen Namen und kann Attribute und Methoden enthalten. Der
Programmcode einer Klasse wird in Java in einer Textdatei mit der Dateiendung *.java gespeichert. Für jede
Klasse wird eine eigene Datei angelegt. Der Java-Compiler legt für jede Klasse eine Datei mit der Endung
*.class an, in welcher der kompilierte Bytecode einer Klasse gespeichert wird.
Die untenstehende Abbildung zeigt das Grundgerüst der Java-Klasse "Kunde" ohne Attribute. Um eine Klasse zu erstellen, werden
mindestens die folgenden vier dargestellten Elemente benötigt: der Sichtbarkeitsmodifikator, das Schlüsselwort
class, der Name der Klasse und ein Paar geschweifte Klammern.

Überblick über die Elemente des Grundgerüsts:
| Element einer Klasse | Beschreibung | Beispiel |
| Sichtbarkeitsmodifikator | Legt die Sichtbarkeit der Klasse für andere Klassen fest. | public |
| Schlüsselwort für die Klassendeklaration |
Zeigt dem Java-Compiler an, dass im Folgenden eine Java-Klasse programmiert ist. |
class |
| Klassenname | Legt den Namen für die Klasse in Java fest und wird als Dateiname verwendet. Die Klasse "Kunde" wird in einer Textdatei "Kunde.java" programmiert. |
Kunde |
| Geschweifte Klammern | Markieren den Inhalt einer Klasse (Attribute und Methoden); alles was innerhalb der Klammern steht, gehört zu einer Klasse. |
{ ... } |
Für den Namen der Klasse müssen dabei folgende Vorgaben eingehalten werden:
class oder public)WortWort, NameDerKlasse)Ein Attribut in Java wird mindestens mit folgenden Elementen beschrieben: dem Sichtbarkeitsmodifikator, dem Datentyp
und dem Attributnamen. Der in der folgenden Abbildung verwendete Datentyp String wird für
Zeichenketten verwendet.

Darüber hinaus können bereits bei der Programmierung Werte für Attribute festgelegt werden (auch:
Defaultwerte). Folgendes Beispiel zeigt zwei Attribute für die im Quellcode jeweils ein Defaultwert
festgelegt wurde:
private boolean istPremiumKunde = false;
private int anzahlDerEinkaeufe = 0;
| Element eines Attributs | Beschreibung | Beispiel |
| Sichtbarkeitsmodifikator | Legt die Sichtbarkeit des Attributs für andere Klassen fest. | private |
| Datentyp des Attributs | Legt den Datentyp des Attributs fest und bestimmt damit Anzahl und Art der Werte, die in dem Attribut gespeichert werden können. Ein Datentyp ist entweder ein primitiver Datentyp oder eine Klasse, ein sogenannter Referenzdatentyp (z.B. String oder Kunde). |
String |
| Attributname | Legt den Namen für das Attribut der Klasse fest; jeder Name darf innerhalb einer Klasse nur 1x vergeben werden. |
name |
| Defaultwert | Legt den initialen Wert des Attributs fest; dieser Wert wird dem Attribut bei der Erzeugung eines Objekts der Klasse zugewiesen. |
= 0 |
| Semikolon | Markiert das Ende der Attributdeklaration. | ; |
Für den Namen eines Attributs einer Klasse müssen folgende Vorgaben eingehalten werden:
public oder class)name ist ein anderes Attribut als
nAme)attributAttribut, nameDesKunden)Mit den Attributen von Klassen können bereits Daten in Form von Attributwerten in Objekten gespeichert werden. Als nächstes sollen nun Methoden implementiert werden, die als dynamische Elemente von Klassen die Werte von Attributen erstellen, berechnen, verändern und löschen können.
Der Zugriff auf Attribute eines Objekts durch andere Objekte erfolgt nur über Methoden, aber niemals über einen direkten Zugriff auf Attribute einer anderen Klasse (Prinzip der Datenkapselung). Daher werden Methoden auch benötigt, um Werte von Attributen auszulesen und sie anderen Klassen zur Verfügung zu stellen.
Grundelemente einer Methode in Java:
| Element einer Methode | Beschreibung | Beispiel |
| Sichtbarkeitsmodifikator | Legt die Sichtbarkeit der Methode für andere Klassen fest. | public |
| Rückgabe-Datentyp der Methode |
Angabe des Datentyps des Objektes, in dem das Ergebnis der Methode nach Abarbeitung des Methodenrumpfes ausgegeben wird. Dabei werden ein primitiver Datentyp oder eine Klasse angegeben. Für den Fall, dass die Methode kein Ergebnis ausgibt, wird void als Rückgabe-Datentyp festgelegt. |
String |
| Methodenname | Legt den Namen für die Methode fest; ein Methodenname darf innerhalb einer Klasse nur dann mehrfach vergeben werden, wenn sich Anzahl bzw. Datentyp der Parameter unterscheiden. |
getName() |
| Parameterliste | Liste benötigter Objekte und deren Datentypen, die zur Abarbeitung der Methode erforderlich sind; werden keine Parameter angegeben, bleibt die Liste leer. |
(Date geburtsdatum) |
| Methodenrumpf | Enthält die konkreten Anweisungen, was beim Aufruf der Methode in welcher Reihenfolge getan wird. Jede Anweisung wird mit einem Semikolon ";" beendet, daher ist in Methodenrümpfen das ";" oft das letzte Zeichen einer Programm- zeile. Die Anweisungen innerhalb eines Methodenrumpfes werden der Reihe nach von oben nach unten abgearbeitet. Wird für die Methode ein Rückgabe-Datentyp angegeben, beginnt die letzte Anweisung des Methodenrumpfes mit dem Schlüsselwort return. |
ergebnis = zahl1 + zahl2; |
Für den Namen der Methode müssen folgende Vorgaben eingehalten werden:
public oder class)methode() ist eine andere Methode als
mEthode())nameDerMethode(), berechneSumme(), gibtNamenZurueck())Ein weiteres Konzept für Methoden in Java ist die Signatur. Anhand ihrer Signatur können Methoden eindeutig identifiziert werden. Die Signatur einer Methode besteht aus dem Namen der Methode und der Parameterliste. Der Rückgabe-Datentyp ist nicht Teil der Signatur. Jede Signatur darf innerhalb einer Klasse nur einmal vorkommen, denn nur so kann die JRE zur Laufzeit des Programmes feststellen, welche Methode aufgerufen und abgearbeitet werden soll. Anders ausgedrückt: Der Name der Methode kann innerhalb einer Klasse mehrfach vergeben werden, solange die Parameterliste sich unterscheidet.
Codebeispiel 1: Hier unterscheiden sich die Namen und damit auch die Signaturen:
public void anmelden() { ... }
public void abmelden() { ... }
Codebeispiel 2: Hier unterscheiden sich die Parameterlisten und damit auch die Signaturen:
public int zumWarenkorbHinzufuegen(Artikel artikel) { ... }
public int zumWarenkorbHinzufuegen(Artikel artikel, int anzahl) { ... }
Codebeispiel 3: Hier unterscheiden sich nur die Rückgabe-Datentypen, jedoch weder die Methodennamen noch
die Parameterlisten. Damit sind die Signaturen identisch:
public boolean bezahlen(boolean pruefung) { ... }
public void bezahlen(boolean pruefung) { ... }
Um auf Attribute einer Klasse zuzugreifen, können beliebige Methodennamen vergeben werden. Ganz grundsätzlich
sollten die Namen jedoch so gewählt werden, dass leicht zu erkennen ist, was die Methode tatsächlich tut. Für
das Schreiben und Auslesen von Attributen werden sogenannte Getter- und Setter-Methoden eingesetzt. Eine Getter-Methode
("get" = "holen") liefert den Wert eines Attributs zurück. Eine Setter-Methode ("set" = "setzen") ändert den
Wert eines Attributs auf den Wert, der als Parameter der Setter-Methode übergeben wird.
Hinweis: Die Getter-Methoden für Attribute vom Typ boolean beginnen statt mit "get" mit "is".
Wird der Parameter einer Setter-Methode genauso benannt wie das private Attribut der Klasse, dient das Schlüsselwort
this dazu, die beiden unterscheiden zu können. Mit this kann auf das Objekt selbst und damit
auf das Klassenattribut Bezug genommen werden (z.B. this.name).
Klasse mit Getter- und Setter-Methoden:

Methoden können aus anderen Methodenrümpfen derselben Klasse heraus oder aus Methodenrümpfen einer anderen Klasse aufgerufen werden. Der Aufruf einer Methode erfolgt durch den Namen.
Codebeispiel 1: Aufruf der Methode getName() innerhalb der Klasse "Kunde":
String id1 = getName();
Codebeispiel 2: Aufruf der Methode setName() innerhalb der Klasse "Kunde":
setName("Lange");
Codebeispiel 3: Aufruf der Methode getName() der Klasse "Kunde" aus einer anderen Klasse heraus:
String id2 = kunde1.getName();
Das Objekt, das die Methode getName() in Kunde aufrufen will, hat ein Objekt der Klasse "Kunde" unter dem Variablennamen
kunde1 gespeichert. Mit dem Aufruf kunde1.getName() kann gezielt die Methode getName() in dem Objekt kunde1 aufgerufen werden.
Der Wert von kunde1.getName() wird in der aufrufenden Klasse in der Variable id2 gespeichert.
Codebeispiel 4: Aufruf der Methode setName() der Klasse "Kunde" aus einer anderen Klasse heraus:
kunde1.setName("Lange");
Das Objekt, das die Methode setName() in Kunde aufrufen will, hat ein Objekt der Klasse "Kunde" unter dem Variablennamen
kunde1 gespeichert. Mit dem Aufruf kunde1.setName("Lange") kann gezielt die Methode setName(String name) in dem Objekt
kunde1 aufgerufen werden. Über diesen Methodenaufruf kann aus einem anderen Objekt heraus der Wert "Lange" als
Attribut in das Objekt kunde1 gespeichert werden.
Gibt es in einer Klasse Methoden mit selbem Namen, so spricht man vom Überladen von Methoden. Mit dem Überladen, also dem mehrfachen Zurverfügungstellen einer Methode mit identischem Namen, erhält man als Entwickler die Möglichkeit unterschiedliches Methodenverhalten in Abhängigkeit von den gegebenen Parametern zu definieren (siehe Signaturen Codebeispiel 2).
Für jedes Java-Programm gibt es einen festgelegten Startpunkt, das heißt, eine ganz bstimmte Methode wird immer
als Erstes aufgerufen, wenn das Programm startet: die sogenannte main-Methode. Die Erzeugung aller von dem
Programm benötigter Objekte startet innerhalb dieser Methode.

Folgende Elemente der main-Methode sollten ohne Änderung übernommen werden:
public)void)main)String[] args)In welcher Klasse des Programms die main-Methode implementiert wird, kann der Entwickler frei entscheiden. Um Verwechslungen zu vermeiden, sollte es jedoch nur eine Klasse mit einer main-Methode geben.

Das Programm "Online-Shop" startet mit der main-Methode der Klasse "OnlineShop". Ausgehend von dieser main-Methode wird ein konkreter Kunde angelegt, das heißt ein Objekt vom Typ Kunde erzeugt und als Variable kunde1 für die weitere Verwendung abgelegt.