Grundstruktur eines Java-Programms
Verstehe die Grundstruktur von Java: Klassen, die main-Methode, Pakete und Imports. Alles, was du über den Aufbau eines Java-Programms wissen musst.
Grundstruktur eines Java-Programms
Du hast bereits dein erstes Java-Programm geschrieben — aber was bedeuten all diese Schluesselwoerter eigentlich? In diesem Kapitel zerlegen wir die Grundstruktur Stueck fuer Stueck und du wirst verstehen, warum Java-Code so aussieht, wie er aussieht.
Die komplette Anatomie
Schauen wir uns ein typisches Java-Programm an:
package de.meinprojekt; // 1. Paket-Deklaration
import java.util.Scanner; // 2. Imports
import java.util.List;
public class MeinProgramm { // 3. Klassen-Definition
// 4. Instanzvariablen (Felder)
private String name;
// 5. Konstruktor
public MeinProgramm(String name) {
this.name = name;
}
// 6. Methoden
public void begruessung() {
System.out.println("Hallo, " + name + "!");
}
// 7. Die main-Methode (Einstiegspunkt)
public static void main(String[] args) {
var programm = new MeinProgramm("Max");
programm.begruessung();
}
}
Lass uns jeden Teil einzeln durchgehen.
1. Pakete (Packages)
Pakete sind wie Ordner fuer deine Klassen. Sie helfen, den Code zu organisieren:
package de.meinprojekt;
Konventionen fuer Paketnamen
| Konvention | Beispiel |
|---|---|
| Umgekehrte Domain | com.firma.projekt |
| Kleinbuchstaben | de.meinprojekt.utils |
| Keine Sonderzeichen | de.meinapp.datenbank |
Die Paketstruktur muss der Ordnerstruktur entsprechen:
src/
└── de/
└── meinprojekt/
└── MeinProgramm.java
Fuer kleine Uebungsprogramme kannst du das Paket auch weglassen — dann liegt die Klasse im “Default-Package”.
2. Imports
Wenn du Klassen aus anderen Paketen nutzen willst, musst du sie importieren:
import java.util.Scanner; // Eine bestimmte Klasse
import java.util.List; // Eine bestimmte Klasse
import java.util.*; // Alle Klassen aus java.util (nicht empfohlen)
Automatisch verfuegbar
Klassen aus java.lang muessen nicht importiert werden:
StringSystemMathInteger,Double,BooleanObject
// Kein Import noetig fuer:
String name = "Max";
System.out.println("Hallo");
int maximum = Math.max(10, 20);
Vergleich mit Python
# Python
from collections import Counter
import os
// Java
import java.util.Map;
import java.io.File;
3. Klassen
In Java ist alles in einer Klasse. Jede Java-Datei enthaelt genau eine oeffentliche Klasse, deren Name zum Dateinamen passen muss:
// Datei: Auto.java
public class Auto {
// Alles kommt hier rein
}
Regeln fuer Klassennamen
| Regel | Beispiel |
|---|---|
| PascalCase (Grossbuchstabe am Anfang) | MeinProgramm, BMIRechner |
| Substantive | Student, Datenbank |
| Keine Sonderzeichen/Umlaute | Benutzer statt Benuetzer |
| Eine public Klasse pro Datei | Auto.java enthaelt public class Auto |
Mehrere Klassen in einer Datei
Du kannst mehrere Klassen in einer Datei haben, aber nur eine darf public sein:
// Datei: HauptProgramm.java
public class HauptProgramm {
public static void main(String[] args) {
var helfer = new Helfer();
helfer.hilf();
}
}
class Helfer { // Kein "public" -- nur innerhalb des Pakets sichtbar
void hilf() {
System.out.println("Ich helfe!");
}
}
4. Die main-Methode
Die main-Methode ist der Einstiegspunkt deines Programms. Wenn du ein Java-Programm startest, sucht die JVM nach genau dieser Methode:
public static void main(String[] args) {
// Hier beginnt dein Programm
}
Jedes Schluesselwort erklaert
| Schluesselwort | Bedeutung |
|---|---|
public | Von ueberall aufrufbar (die JVM muss darauf zugreifen koennen) |
static | Gehoert zur Klasse, nicht zu einem Objekt (kein new noetig) |
void | Gibt keinen Wert zurueck |
main | Der Name, nach dem die JVM sucht |
String[] args | Kommandozeilenargumente als String-Array |
Kommandozeilenargumente
Du kannst deinem Programm beim Start Argumente uebergeben:
public class Argumente {
public static void main(String[] args) {
if (args.length > 0) {
System.out.println("Hallo " + args[0] + "!");
} else {
System.out.println("Hallo Unbekannter!");
}
}
}
java Argumente Max
# Ausgabe: Hallo Max!
java Argumente
# Ausgabe: Hallo Unbekannter!
5. Zugriffsmodifizierer
Java hat vier Zugriffsmodifizierer, die bestimmen, wer auf etwas zugreifen kann:
| Modifizierer | Klasse | Paket | Unterklasse | Ueberall |
|---|---|---|---|---|
public | Ja | Ja | Ja | Ja |
protected | Ja | Ja | Ja | Nein |
| (kein/package-private) | Ja | Ja | Nein | Nein |
private | Ja | Nein | Nein | Nein |
public class Beispiel {
public String oeffentlich = "Jeder kann mich sehen";
protected String geschuetzt = "Paket + Unterklassen";
String paketPrivat = "Nur im selben Paket";
private String privat = "Nur in dieser Klasse";
}
Fuer den Anfang reichen public und private:
public— fuer alles, was von aussen sichtbar sein sollprivate— fuer interne Details
6. Datentypen auf einen Blick
Java unterscheidet zwischen primitiven Typen und Referenztypen:
Primitive Typen
int ganzzahl = 42;
double dezimalzahl = 3.14;
boolean wahrheitswert = true;
char zeichen = 'A';
long grosseZahl = 9_999_999_999L;
float floatZahl = 3.14f;
byte kleineByte = 127;
short kurzeZahl = 32000;
Referenztypen
String text = "Hallo";
int[] zahlen = {1, 2, 3};
var liste = List.of("A", "B", "C");
var scanner = new Scanner(System.in);
Der Unterschied: Primitive Typen speichern den Wert direkt, Referenztypen speichern eine Referenz (Adresse) auf ein Objekt im Speicher.
7. Namenskonventionen
Java hat klare Namenskonventionen — halte dich daran, und dein Code wird sofort professionell aussehen:
| Element | Konvention | Beispiel |
|---|---|---|
| Klassen | PascalCase | MeinProgramm, StudentVerwaltung |
| Methoden | camelCase | berechneNote(), getName() |
| Variablen | camelCase | meinName, alterInJahren |
| Konstanten | UPPER_SNAKE_CASE | MAX_GROESSE, PI |
| Pakete | lowercase | de.meinprojekt.utils |
public class StudentenVerwaltung { // PascalCase
private static final int MAX_STUDENTEN = 100; // UPPER_SNAKE_CASE
private String vorname; // camelCase
public String getVorname() { // camelCase
return vorname;
}
}
8. Die Rolle von Semikolons und Klammern
Semikolons
Jede Anweisung endet mit einem Semikolon:
var name = "Max"; // Semikolon
System.out.println("Hallo"); // Semikolon
int summe = 5 + 3; // Semikolon
Kein Semikolon nach:
- Klassen-Definition:
public class Test { } - Methoden-Definition:
public void test() { } - if/else-Bloecke:
if (x > 5) { } - Schleifen:
for (int i = 0; ...) { }
Geschweifte Klammern
Geschweifte Klammern { } definieren Bloecke:
public class Beispiel { // Klassen-Block
public static void main(String[] args) { // Methoden-Block
if (true) { // if-Block
System.out.println("Ja!");
} // Ende if-Block
} // Ende Methoden-Block
} // Ende Klassen-Block
Ein vollstaendiges Beispiel
Hier siehst du alle Konzepte in einem Programm:
package de.tutorial;
import java.util.Scanner;
/**
* Ein einfaches Programm, das den Benutzer begruesst
* und sein Geburtsjahr berechnet.
*/
public class Willkommen {
// Konstante
private static final int AKTUELLES_JAHR = 2026;
public static void main(String[] args) {
var scanner = new Scanner(System.in);
// Name einlesen
System.out.print("Wie heisst du? ");
var name = scanner.nextLine();
// Alter einlesen
System.out.print("Wie alt bist du? ");
var alter = scanner.nextInt();
// Geburtsjahr berechnen
var geburtsjahr = AKTUELLES_JAHR - alter;
// Ausgabe
System.out.println();
System.out.printf("Hallo %s!%n", name);
System.out.printf("Du bist ca. %d geboren.%n", geburtsjahr);
System.out.printf("In 10 Jahren bist du %d Jahre alt.%n", alter + 10);
scanner.close();
}
}
Uebungen
Uebung 1: Struktur erkennen
Erklaere in eigenen Worten, was jedes Schluesselwort in dieser Zeile bedeutet:
public static void main(String[] args)
Uebung 2: Eigene Klasse
Erstelle eine Klasse Steckbrief mit einer main-Methode, die deinen Namen, dein Alter, deine Stadt und dein Hobby ausgibt. Verwende sinnvolle Variablennamen.
Uebung 3: Kommandozeilen-Gruss
Schreibe ein Programm, das Kommandozeilenargumente entgegennimmt. Wenn ein Name uebergeben wird, soll es “Hallo [Name]!” ausgeben. Ohne Argument soll es “Hallo Welt!” ausgeben.
Uebung 4: Paket erstellen
Erstelle ein Paket de.meintutorial und lege darin eine Klasse Quiz an, die drei Fragen stellt und die Antworten ausgibt.
Was kommt als Naechstes?
In der naechsten Lektion tauchen wir tief in Variablen ein. Du lernst alles ueber Deklaration, Initialisierung, Scope und die Unterschiede zwischen primitiven Typen und Referenztypen.
Zusammenfassung
- Jedes Java-Programm besteht aus Klassen in Paketen
- Die main-Methode ist der Einstiegspunkt:
public static void main(String[] args) - Imports machen Klassen aus anderen Paketen verfuegbar
- Zugriffsmodifizierer (
public,private, etc.) steuern die Sichtbarkeit - Java hat klare Namenskonventionen (PascalCase fuer Klassen, camelCase fuer Variablen)
- Jede Anweisung endet mit einem Semikolon (
;) - Geschweifte Klammern
{ }definieren Code-Bloecke
Pro-Tipp: Am Anfang mag die Java-Struktur umstaendlich wirken — aber genau diese Struktur ist der Grund, warum Java-Projekte mit Millionen Zeilen Code wartbar bleiben. IntelliJ IDEA generiert die meiste Boilerplate automatisch: Tippe einfach psvm + Tab fuer die main-Methode oder nutze “New > Java Class” fuer neue Klassen.