CodeGym /Kurse /JAVA 25 SELF /Struktur eines Java-Programms, die Methode main

Struktur eines Java-Programms, die Methode main

JAVA 25 SELF
Level 8 , Lektion 1
Verfügbar

1. Einleitung

Wenn man gerade erst mit dem Programmieren beginnt, scheint es, als könne man einfach Zeile für Zeile Code schreiben und alles wird funktionieren. Doch sobald das Programm komplexer wird, beginnt das Durcheinander im Kopf: Wo befindet sich was, warum wurde es so geschrieben, und wenn man eine Zeile ändern muss – wo liegt sie überhaupt?

Deshalb bietet Java wie die meisten modernen Sprachen eine Möglichkeit, Code „zu ordnen“, damit man jederzeit verstehen kann, was das Programm macht, und schnell die richtige Stelle findet.

Stellen Sie sich ein Unternehmen vor. Es gibt dort die Personalabteilung, die Buchhaltung, die IT-Abteilung, die Logistikabteilung und so weiter. Jede Abteilung hat ihren Verantwortungsbereich, ihre Mitarbeitenden und Aufgaben.

In einem Programm in Java ist jede solche „Abteilung“ eine Klasse. Eine Klasse ist zum Beispiel für die Arbeit mit Benutzern zuständig, eine andere für Berechnungen, eine dritte für die Arbeit mit Dateien.

So sieht die typische Struktur eines einfachen Projekts aus:

  • Main.java — die Hauptzentrale: Hier befindet sich der „Einstiegspunkt“, von dem alles startet.
  • User.java — die Abteilung, in der Benutzerdaten gespeichert und verarbeitet werden.
  • Calculator.java — die Abteilung für Berechnungen.
  • FileHelper.java — die Spezialisten für Dateien.

Selbst in einem sehr kleinen Programm gibt es meist mindestens eine Klasse. Und große Projekte – das ist bereits ein ganzer „Wolkenkratzer“ aus Hunderten von Klassen!

2. Eine Klasse ist eine Werkzeugkiste

Java ist eine objektorientierte Sprache, und in ihr ist alles ein Objekt. Die Typen der Objekte heißen Klassen.

Eine Klasse ist wie eine Kiste oder ein Schränkchen, in das wir die Dinge legen, die wir brauchen: Variablen, Methoden. Stellen Sie sich eine Kiste mit der Aufschrift „Hämmer“ vor: Darin liegen nur Werkzeuge, die mit Hämmern zu tun haben.

class Example 
{
    // Hier liegen unsere Werkzeuge: Variablen und Methoden
}

Klassen enthalten üblicherweise Variablen und Funktionen. In Java nennt man die Variablen einer Klasse Felder und die Funktionen einer Klasse Methoden. Am Sinn ändert das nichts.

Erinnern Sie sich an unseren ersten Code?

System.out.println("Hallo zusammen!");

In diesem Code gibt es sowohl eine Klasse als auch Methoden:

  • System — das ist eine Klasse, die Methoden für die Arbeit mit dem System enthält.
  • out — das ist ein Feld, das ein Objekt der Klasse PrintStream ist.
  • println — das ist eine Methode der Klasse PrintStream, die Text auf den Bildschirm ausgibt.

Im Grunde läuft Programmierung darauf hinaus, eigene Klassen und Methoden zu schreiben, die Methoden anderer Klassen aufrufen.

3. Kurzschreibweise der Methode main()

Eigentlich sieht das kleinste Programm in Java so aus:

class Program 
{
    public static void main(String[] args) 
    {
        // Hier steht dein Code
    }
}

Es enthält mindestens eine Klasse, die die Methode main mit genau dieser Kopfzeile (Signatur) enthalten muss:


public static void main(String[] args)
Signatur der Methode main in Java

In Java 21 gibt es jedoch die Möglichkeit, die Methode main() in Kurzform zu schreiben. Der Java-Compiler wandelt sie dann (beim Kompilieren) in die korrekte Methode main() um.

Jedes Mal, wenn du also Code der Form schreibst:

void main() 
{
    Scanner console = new Scanner(System.in);
    int age = console.nextInt();
    System.out.println("Alter: " + age);
}

wandelt der Java-Compiler ihn in folgenden Code um:

class Program 
{
    public static void main(String[] args) 
    {
        Scanner console = new Scanner(System.in);
        int age = console.nextInt();
        System.out.println("Alter: " + age);
    }
}

4. Eine typische Java-Klasse

Eine typische Java-Klasse sieht ungefähr so aus:

public class MathUtils 
{
    // Statische Variablen (global für die Klasse)
    static final double PI = 3.14159;
    static int callCounter = 0;

    // Statische Methode: Berechnung der Kreisfläche
    public static double circleArea(double radius) 
    {
        callCounter++;
        return PI * radius * radius;
    }

    // Statische Methode: Maximum aus zwei Zahlen finden
    public static int max(int a, int b) 
    {
        callCounter++;
        return (a > b) ? a : b;
    }

    // Statische Methode: wie oft wurden die Methoden aufgerufen
    public static int getCallCount() 
    {
        return callCounter;
    }

    // Wir greifen aus der Methode main() auf Felder und Methoden zu 
    public static void main(String[] args) 
    {
        System.out.println("Fläche des Kreises: " + circleArea(5));
        System.out.println("Maximum: " + max(10, 42));
        System.out.println("Methoden wurden " + getCallCount() + " Mal aufgerufen");
    }
}

Was sehen wir hier:

  • Eine Klasse kann viele Methoden haben.
  • Eine Klasse kann eigene Variablen haben.
  • Methoden einer Klasse können einander aufrufen.
  • Methoden einer Klasse können auf gemeinsame Variablen zugreifen.
  • Vor jeder Methode stehen dieselben „magischen Wörter“ wie: public static.
  • Vor jeder Methode stehen unterschiedliche Typen: int, double, void.

Im Folgenden gehen wir auf diese Feinheiten ein.

5. Felder (Variablen) der Klasse – ihr Gedächtnis

Innerhalb einer Klasse kann man Variablen speichern, die oft Felder (fields) genannt werden. Das sind wie Speicherzellen, in die wir Daten ablegen.

public class MathUtils 
{
    // Statische Variablen (global für die Klasse)
    static final double PI = 3.14159;
    static int callCounter = 0;
}    

Felder ermöglichen es einer Klasse, sich zwischen Aufrufen verschiedener Methoden etwas zu „merken“. Zum Beispiel zu zählen, wie oft ein Button gedrückt wurde. Oder wie oft eine Methode aufgerufen wurde (callCounter). Es kann beliebig viele Felder geben.

6. Methoden – Aktionen, die eine Klasse ausführen kann

Methoden sind die „Fähigkeiten“ unserer Klasse. Wenn die Klasse ein Mitarbeitender ist, dann sind die Methoden seine Skills: was er tun kann.

Eine Methode kann zum Beispiel:

  • etwas auf dem Bildschirm ausgeben,
  • die Summe zweier Zahlen berechnen,
  • Daten „als Eingabe“ annehmen und ein Ergebnis zurückgeben.

Aufbau einer Methode:

  1. Rückgabetyp (zum Beispiel void — wenn nichts zurückgegeben wird, oder int — wenn eine Zahl zurückgegeben wird).
  2. Methodenname (zum Beispiel circleArea).
  3. Parameter in Klammern (können fehlen).
  4. Geschweifte Klammern { ... } — der Methodenrumpf.
public class MathUtils 
{
    // Statische Methode: Berechnung der Kreisfläche
    public static double circleArea(double radius) 
    {
        callCounter++;
        return PI * radius * radius;
    }

    // Statische Methode: Maximum aus zwei Zahlen finden
    public static int max(int a, int b) 
    {
        callCounter++;
        return (a > b) ? a : b;
    }
}    

Mehr Details über Methoden und alle damit verbundenen Feinheiten lernen Sie in den nächsten Vorlesungen.

7. Zugriffsmodifizierer

In Java kann man festlegen, welche Teile einer Klasse von anderen Klassen aus zugänglich sind und welche nur für interne Zwecke bleiben. Dafür werden Zugriffsmodifizierer verwendet.

  • publicfür alle sichtbar. Solche Methoden und Felder kann man von überall im Programm verwenden/aufrufen.
  • privatenur innerhalb der Klasse selbst sichtbar. Das sind interne Details, die für andere nicht zugänglich sein sollen. Als ob es sie gar nicht gäbe.
public class MathUtils 
{
    // Statische Variablen (global für die Klasse)
    private static final double PI = 3.14159;
    private static int callCounter = 0;

    // Statische Methode: Berechnung der Kreisfläche
    public static double circleArea(double radius) 
    {
        callCounter++;
        return PI * radius * radius;
    }
}    

Die goldene Regel: Felder macht man üblicherweise private und „nach außen“ gibt man nur die benötigten Methoden mit dem Modifizierer public. Mehr zu Sichtbarkeitsmodifizierern – in den nächsten Vorlesungen.

8. Statische Methoden und Variablen

Normalerweise wird in Java eine Klasse als Schablone für die Erzeugung von Objekten verwendet. Man schreibt seine Klasse, erzeugt dann Objekte dieser Klasse mit dem Schlüsselwort new und ruft erst anschließend Methoden an den Objekten auf.

Es gibt jedoch eine zweite Art, eine Klasse zu verwenden – als Container für globale Variablen und Methoden, die man von überall im Programm aufrufen kann. Genau dafür wird das Schlüsselwort static verwendet. Es sagt dem Java-Compiler, dass Methoden und Felder der Klasse nicht an ein Objekt der Klasse gebunden sind, sondern direkt an die Klasse selbst. Deshalb kann man sie aufrufen, ohne überhaupt Objekte der Klasse zu erzeugen.

Solche Methoden benutzen Sie übrigens ständig:

Integer.parseInt();     // Statische Methode parseInt() der Klasse Integer
String.valueOf();       // Statische Methode valueOf() der Klasse String 
Double.isInfinite();    // Statische Methode isInfinite() der Klasse Double 
Arrays.copy();          // Statische Methode copy() der Klasse Arrays 

Die Methode main() wird immer statisch deklariert, da mit ihr die Ausführung Ihres Java-Programms beginnt – noch bevor irgendwelche Objekte erzeugt werden.

9. Tipp in IDEA

Die vollständige Signatur der Methode main() sieht so aus:

public static void main(String[] args) 

Und damit Sie sie in IntelliJ IDEA nicht jedes Mal tippen müssen, gibt es dafür einen Shortcut. Schreiben Sie einfach psvm und drücken Sie Tab, und IntelliJ IDEA schreibt den folgenden Code für Sie:

public static void main(String[] args) 
{
    
}

Sich das zu merken ist leicht – psvm sind die Anfangsbuchstaben von public static void main.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION