1. Ordner src – wo Ihr Code lebt
Wenn ein Java-Projekt ein Haus wäre, dann wäre der Ordner src das gemütliche Wohnzimmer, in dem alle Hauptbewohner zusammenkommen (Ihre Klassen). Genau hier werden alle Quellcodedateien abgelegt – nicht im Projektstamm, nicht im Einstellungsordner und nicht auf dem Desktop (auch wenn die Versuchung groß ist).
Warum die Quellen vom Rest trennen?
- Im Ordner
srcliegen nur Dateien, die Sie selbst schreiben: .java. - Alles, was beim Build-Prozess entsteht (z. B. .class-Dateien, temporäre Dateien), kommt in andere Ordner (out, build, target usw.).
- Das erleichtert die Navigation, macht das Projekt übersichtlicher und die IDE – glücklicher.
Beispielstruktur eines einfachen Projekts:
MyFirstProject/
├── .idea/ # Servicedateien von IntelliJ IDEA, nicht anfassen
├── out/ # hier erscheinen die kompilierten .class-Dateien
├── src/ # hier lebt Ihr Quellcode!
│ └── Main.java
├── MyFirstProject.iml
└── README.md
Wichtig:
Alles, was Sie selbst schreiben – Klassen, Pakete, Interfaces – muss in den Ordner src. Legen Sie dort keine Bilder, Musik oder geheime Rezepte ab – dafür gibt es andere Ordner.
2. Pakete package
In Java werden Klassen in „Paketen“ gruppiert – das ist wie Ordner im Dateisystem, nur für Klassen. Pakete helfen:
- Namenskonflikte zu vermeiden: Wenn es im Projekt zwei Klassen
Maingibt, kommen sie sich in unterschiedlichen Paketen nicht in die Quere. - Code logisch zu strukturieren (z. B.
com.codegym.tasks,com.mycompany.utils). - Den Zugriff auf Klassen und Methoden zu steuern.
Syntax der Paketdeklaration
Am Anfang jeder Java-Datei (vor allen import- und class-Anweisungen) steht die Zeile:
package com.codegym.lesson05;
Das bedeutet: Die Klasse aus dieser Datei gehört zum Paket com.codegym.lesson05.
Wichtig:
Die Ordner im Dateisystem müssen mit dem Paketnamen übereinstimmen! Wenn Sie package com.codegym.lesson05; geschrieben haben, ist der Pfad zur Datei:
src/com/codegym/lesson05/Main.java
Wie erstellt man ein Paket in IntelliJ IDEA
- Klicken Sie im Projekt-Panel mit der rechten Maustaste auf den Ordner
src. - Wählen Sie New → Package.
- Geben Sie einen Namen ein, z. B.: com.codegym.lesson05 (die IDE erstellt die verschachtelten Ordner automatisch).
- Erstellen Sie nun eine neue Klasse in diesem Paket. Klicken Sie mit der rechten Maustaste auf den Ordner com.codegym.lesson05 und wählen Sie New → Java Class. Geben Sie den Namen ein.
Beispiel:
src/
└── com/
└── codegym/
└── lesson05/
└── User.java
Warum sollte man nicht einfach alles in src werfen?
Wenn Sie alle Klassen durcheinanderlegen, wird das Projekt schnell zu einer „Müllhalde“, in der eine bestimmte Datei zu finden schwieriger ist als ein Laptop‑Ladekabel im Studentenwohnheim. Verwenden Sie Pakete – so lässt sich das Projekt einfacher skalieren, externe Bibliotheken einbinden und Code zwischen verschiedenen Teams aufteilen.
3. Vollständiger Klassenname
Jede Klasse in Java befindet sich zwingend in einem Paket. Ein Paket ist einfach ein „Ordner“ innerhalb der Klassenbibliothek. Zum Beispiel:
- Die Klasse System liegt im Paket java.lang. Ihr vollständiger Name lautet java.lang.System.
- Die Klasse Scanner liegt im Paket java.util. Ihr vollständiger Name lautet java.util.Scanner.
- Die Klasse ArrayList liegt ebenfalls in java.util, daher lautet der vollständige Name java.util.ArrayList.
Das heißt: vollständiger Klassenname = Paketname + Punkt + Klassenname.
Versuchen wir, das im Code zu verwenden:
java.util.Scanner sc = new java.util.Scanner(System.in);
String name = sc.nextLine();
System.out.println("Hallo, " + name);
Hier schreiben wir ausdrücklich java.util.Scanner. Der Compiler versteht, von welcher Klasse die Rede ist, selbst wenn es im Programm andere Klassen mit dem Namen Scanner gibt.
Das ist sehr wichtig: Der Klassenname kann gleich sein, aber der vollständige Name ist immer eindeutig.
Wozu braucht man überhaupt den vollständigen Namen?
Stellen Sie sich vor, wir haben zwei verschiedene Klassen Date:
- java.util.Date (alte Klasse zur Arbeit mit Datumswerten),
- java.sql.Date (Datum für die Arbeit mit Datenbanken).
Wenn Sie einfach schreiben:
Date d = new Date();
weiß der Compiler nicht, welche Date Sie verwenden möchten. Wenn Sie jedoch den vollständigen Namen schreiben:
java.util.Date d1 = new java.util.Date();
java.sql.Date d2 = new java.sql.Date(System.currentTimeMillis());
– gibt es keine Verwechslung.
4. Der Operator import
Jedes Mal den vollständigen Klassennamen zu schreiben, ist unpraktisch. Genau dafür gibt es in Java den Operator import.
Wenn wir schreiben:
import java.util.Scanner;
bedeutet das: „In diesem Programm werde ich die Klasse Scanner aus dem Paket java.util verwenden.“ Danach können wir einfach schreiben:
Scanner sc = new Scanner(System.in);
und der Compiler versteht, dass es sich genau um java.util.Scanner handelt.
Gewöhnlicher Import (eine Klasse)
Das ist die gebräuchlichste Variante. Wir geben eine konkrete Klasse an:
import java.util.Scanner;
import java.util.ArrayList;
Jetzt können wir die Kurznamen schreiben: Scanner, ArrayList.
Import des gesamten Pakets *
Manchmal verwendet ein Programm viele Klassen aus demselben Paket. Dann kann man schreiben:
import java.util.*;
Das bedeutet: „Erlaube die Verwendung aller Klassen aus dem Paket java.util ohne vollständigen Namen“.
Jetzt können wir schreiben:
Scanner sc = new Scanner(System.in);
ArrayList<String> list = new ArrayList<>();
Wichtig ist jedoch: import java.util.*; importiert nur Klassen aus dem Paket java.util, aber nicht aus Unterpaketen. Die Klasse java.util.concurrent.ConcurrentHashMap ist nicht enthalten; sie muss separat importiert werden.
Was man mit import nicht tun kann
importdarf nicht innerhalb einer Methode verwendet werden – es steht nur am Anfang der Datei.importlädt keine Klassen in den Speicher. Es teilt dem Compiler nur mit, woher die Klasse genommen wird.importkann den vollständigen Namen nicht ersetzen, wenn es zwei gleichnamige Klassen gibt.
5. Classpath – wie Java Ihre Klassen findet
Classpath ist die „Route“, entlang der Java beim Starten eines Programms nach Ihren Klassen sucht. Man kann es sich als eine Liste von Ordnern vorstellen, in denen Java die benötigten .class-Dateien (kompilierte Versionen Ihrer .java) sucht.
Standardmäßig fügt die IDE den Ordner src (oder den Ordner mit den kompilierten Klassen, z. B. out/production/ProjectName) selbst zum Classpath hinzu. Das heißt: Wenn Sie eine Klasse im Paket com.codegym.lesson05 geschrieben haben, sucht Java sie unter dem Pfad:
out/production/ProjectName/com/javarush/lesson05/Main.class
Wie funktioniert der Classpath in IntelliJ IDEA?
- Wenn Sie das Programm über die IDE starten, setzt sie den benötigten Classpath automatisch.
- Wenn Sie das Programm über die Kommandozeile starten, müssen Sie den Classpath explizit mit dem Schalter -cp oder -classpath angeben.
- Alle Klassen aus Ihrem Projekt und den eingebundenen Bibliotheken müssen sich in Ordnern befinden, die im Classpath angegeben sind.
6. Organisation des Codes im Projekt
Eine Klasse – eine Datei
In Java gehört jeder public-Klasse eine eigene Datei, die genau so heißt wie die Klasse selbst. Wenn Sie z. B. eine Klasse Person haben, muss die Datei Person.java heißen.
Beispiel:
src/com/javarush/lesson05/Person.java
package com.codegym.lesson05;
public class Person {
String name;
}
Datei- und Klassennamen müssen übereinstimmen
Heißt die Klasse MySuperClass, dann muss die Datei MySuperClass.java heißen. Das ist keine Laune, sondern eine Anforderung des Java-Compilers. Wenn Sie das verwechseln – erhalten Sie einen Fehler zur Compile‑Zeit.
Wo werden Ressourcen gespeichert (Bilder, Textdateien)?
- Für Ressourcen erstellt man üblicherweise einen eigenen Ordner, z. B. resources oder res.
- In IntelliJ IDEA können Sie einen solchen Ordner per Rechtsklick hinzufügen: Mark Directory as → Resources Root.
- Der Java‑Code kann über den
classpathauf diese Dateien zugreifen.
Beispielstruktur:
MyFirstProject/
├── src/
│ └── com/javarush/lesson05/
│ └── Main.java
├── resources/
│ └── config.txt
8. Typische Fehler beim Arbeiten mit der Projektstruktur
Abweichung zwischen Ordnerstruktur und Paket
Wenn am Anfang der Datei package com.codegym.lesson05; steht, die Datei aber unter src/Main.java liegt, meldet der Compiler "package does not exist" oder "class not found". Achten Sie stets darauf, dass die Ordner dem Paketnamen entsprechen!
Abweichung zwischen Datei- und Klassenname
Wenn die Klasse Person heißt, die Datei aber People.java, erhalten Sie "class Person is public, should be declared in a file named Person.java".
Manuelles Verschieben von Dateien ohne Aktualisierung des Pakets
Wenn Sie eine Datei in einen anderen Ordner verschieben, aber die Zeile package nicht ändern, lässt sich das Programm nicht kompilieren. Machen Sie das im Project‑Fenster der IDE – sie aktualisiert das package automatisch!
Ressourcen nicht zum Classpath hinzugefügt
Wenn Sie Dateien (z. B. Textdateien) außerhalb des Ordners resources speichern und den Ordner nicht als Resources Root markieren, kann das Programm sie über den classpath nicht finden.
GO TO FULL VERSION