Zum Inhalt springen
Java Anfänger 20 min

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.

Aktualisiert:

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

KonventionBeispiel
Umgekehrte Domaincom.firma.projekt
Kleinbuchstabende.meinprojekt.utils
Keine Sonderzeichende.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:

  • String
  • System
  • Math
  • Integer, Double, Boolean
  • Object
// 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

RegelBeispiel
PascalCase (Grossbuchstabe am Anfang)MeinProgramm, BMIRechner
SubstantiveStudent, Datenbank
Keine Sonderzeichen/UmlauteBenutzer statt Benuetzer
Eine public Klasse pro DateiAuto.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

SchluesselwortBedeutung
publicVon ueberall aufrufbar (die JVM muss darauf zugreifen koennen)
staticGehoert zur Klasse, nicht zu einem Objekt (kein new noetig)
voidGibt keinen Wert zurueck
mainDer Name, nach dem die JVM sucht
String[] argsKommandozeilenargumente 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:

ModifiziererKlassePaketUnterklasseUeberall
publicJaJaJaJa
protectedJaJaJaNein
(kein/package-private)JaJaNeinNein
privateJaNeinNeinNein
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 soll
  • private — 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:

ElementKonventionBeispiel
KlassenPascalCaseMeinProgramm, StudentVerwaltung
MethodencamelCaseberechneNote(), getName()
VariablencamelCasemeinName, alterInJahren
KonstantenUPPER_SNAKE_CASEMAX_GROESSE, PI
Paketelowercasede.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.

Zurück zum Java Kurs