Zum Hauptinhalt springen

Werkzeuge in IntelliJ

Warum das ein eigenes Infoblatt ist

Eine Entwicklungsumgebung ist kein besserer Texteditor. Sie hat den Quelltext verstanden: Sie weiß, welche Klasse von welcher erbt, wo eine Methode aufgerufen wird und welcher Bezeichner zu welcher Deklaration gehört.

Daraus folgt die Regel, die dieses ganze Blatt zusammenfasst:

Wenn du etwas von Hand suchst, ersetzt oder abtippst, hast du wahrscheinlich das falsche Werkzeug benutzt.

Wer eine Klasse mit Suchen und Ersetzen umbenennt, erwischt auch den Text in einem Kommentar und in einer fremden Bibliothek. Wer sie mit Umbenennen umbenennt, erwischt genau die Stellen, die dasselbe meinen — und keine andere.

Die Tastenkürzel in diesem Blatt

Alle Angaben gelten für die Windows-Standardbelegung. Wenn ein Kürzel nichts tut, steht die richtige Taste unter File → Settings → Keymap. Dort lässt sich auch nach dem Namen des Befehls suchen.

Die zwei Tasten, die alles andere ersetzen

TasteNameWas sie tut
Shift ShiftSearch EverywhereSuchfeld über alles: Klassen, Dateien, Einstellungen, Befehle. Wenn du nicht weißt, wo etwas ist — hier anfangen
Alt + EnterKontextaktionenAuf jedem rot oder gelb markierten Stück Code: IntelliJ schlägt die Behebung vor und führt sie aus

Alt + Enter ist das wichtigste Kürzel der ganzen Umgebung. Fehlender Import, fehlender Konstruktor, unbenutzte Variable, „diese Schleife lässt sich als Stream schreiben" — die Umgebung weiß es und macht es.

Alt + Enter auch dann drücken, wenn nichts kaputt ist

Es geht nicht nur um Fehler. Auf einer Zeichenkette bietet es Inject language, auf einer Klasse Implement methods, auf einer Bedingung Invert if. Ausprobieren kostet nichts: Was du nicht auswählst, passiert nicht.

TasteWohin
Ctrl + NZu einer Klasse
Ctrl + Shift + NZu einer Datei (auch application.properties, auch docker-compose.yml)
Ctrl + B (oder Ctrl + Klick)Zur Deklaration — was ist das hier eigentlich?
Ctrl + Alt + BZur Implementierung — bei einer Schnittstelle: wer setzt sie um?
Alt + F7Alle Verwendungen — wer ruft das auf?
Ctrl + EZuletzt geöffnete Dateien
Ctrl + Shift + TZwischen Klasse und Testklasse springen (und den Test anlegen, wenn es keinen gibt)
Ctrl + F12Gliederung der aktuellen Datei — alle Methoden auf einen Blick
Alt + 1Projektbaum ein-/ausblenden

Alt + F7 ist das Werkzeug, das man am meisten unterschätzt. Bevor du eine Methode änderst, sieh nach, wer sie benutzt. Das ist der Unterschied zwischen „läuft bei mir" und „läuft".

Schreiben lassen statt tippen

TasteWas entsteht
Alt + EinfgKonstruktor, Getter/Setter, equals/hashCode, toString, Testmethode
Ctrl + OMethoden der Oberklasse überschreiben
Ctrl + IMethoden einer Schnittstelle umsetzen
Ctrl + Alt + TMarkierten Code umschließen — mit try, if, einer Schleife
Ctrl + Shift + EnterAnweisung vervollständigen: Klammer zu, Semikolon, Zeilenumbruch

Dazu kommen Kürzel im Editor, die man einfach tippt und mit Tab bestätigt:

psvm → public static void main(String[] args) { }
sout → System.out.println();
iter → for (Typ element : sammlung) { }

Und die Postfix-Vervollständigung, die rückwärts arbeitet — erst der Ausdruck, dann was damit geschehen soll:

supplier.getName().sout → System.out.println(supplier.getName());
articles.forfor (Article article : articles) { }
supplier.nn → if (supplier != null) { }
Warum das mehr ist als Tippersparnis

Wer sout tippt, macht keinen Tippfehler in System.out.println. Wer den Konstruktor erzeugen lässt, vergisst kein Feld. Die Zeit ist der kleinere Gewinn — der größere ist, dass eine ganze Fehlerklasse verschwindet.

Umbenennen und herausziehen

Das sind Refactorings: Änderungen, die den Code umbauen, ohne sein Verhalten zu ändern. IntelliJ zieht dabei alle betroffenen Stellen nach.

TasteRefactoringWofür
Shift + F6UmbenennenKlasse, Methode, Variable, Paket — überall zugleich
Ctrl + Alt + MMethode extrahierenEin Stück Code bekommt einen Namen
Ctrl + Alt + VVariable extrahierenAus einem verschachtelten Ausdruck wird eine benannte Zwischenstufe
Ctrl + Alt + FFeld extrahierenAus der lokalen Variablen wird ein Feld
F6VerschiebenKlasse in ein anderes Paket — die Imports wandern mit
Ctrl + Alt + LFormatierenEinrückung nach den Projektregeln
Ctrl + Alt + OImports aufräumenUnbenutzte weg, Reihenfolge sortiert
Nie mit Suchen und Ersetzen umbenennen

Ctrl + R kennt keine Bedeutung. Es ersetzt Text — auch in Kommentaren, auch in Zeichenketten, auch dort, wo dasselbe Wort etwas anderes meint.

Shift + F6 kennt die Bedeutung. Es benennt den einen Bezeichner um und findet dabei auch die Stellen, an denen er anders geschrieben in einem Namen steckt (supplierId beim Umbenennen von supplier) — und fragt vorher.

Methode extrahieren ist dabei das Refactoring mit dem größten Nutzen im Alltag: Wenn du in einer Service-Methode einen Kommentar schreiben willst, der erklärt, was die nächsten fünf Zeilen tun — markiere die fünf Zeilen, Ctrl + Alt + M, und gib ihnen den Namen, den du in den Kommentar geschrieben hättest.

Der Debugger

Ein System.out.println beantwortet eine vorher gestellte Frage. Der Debugger lässt dich fragen, während das Programm steht.

public void deleteSupplier(Long id) { long count = articleRepository.count… if (count > 0) { throw new SupplierHasArticl…} repository.deleteById(id);}Haltepunkt (Strg + F8)Klick auf den linken Rand. Hier hält dasProgramm an — noch bevor die Zeile läuft.Variablesid = 7count = 3jedes Feld aufklappbarF8eine Zeile weiterF7in die Methode hineinF9weiterlaufen lassenAlt + F8 — AuswertenBeliebigen Ausdruck eintippen undim angehaltenen Zustand ausrechnen.
TasteWirkung
Ctrl + F8Haltepunkt setzen oder entfernen
Shift + F9Zuletzt Gestartetes im Debugger starten
F8Eine Zeile weiter — Methodenaufrufe werden komplett ausgeführt
F7In die aufgerufene Methode hinein
Shift + F8Aus der Methode heraus
F9Weiterlaufen bis zum nächsten Haltepunkt
Alt + F8Ausdruck auswerten
Der bedingte Haltepunkt

Rechtsklick auf einen gesetzten Haltepunkt öffnet ein kleines Feld für eine Bedingung, zum Beispiel id == 7.

Damit hält das Programm nur in dem einen Fall an, um den es geht — statt bei jedem der zweihundert Durchläufe. Das ist der Unterschied zwischen „Debugger ist mühsam" und „Debugger ist das schnellste Werkzeug im Kasten".

Ein Haltepunkt in einer Spring-Anwendung kann die Anfrage abbrechen

Steht das Programm zu lange, läuft beim Client eine Zeitgrenze ab. Der Debugger ist dann nicht schuld an der Fehlermeldung — sie ist nur eine Folge.

Tests starten und lesen

Taste / OrtWirkung
grüner Pfeil neben Klasse oder Methodegenau diesen Test starten
Ctrl + Shift + F10den Test starten, in dem der Cursor steht
Shift + F10den letzten Lauf wiederholen
Rechtsklick auf src/test/javaRun All Tests — alles auf einmal
im Testfenster: Rerun Failed Testsnur die roten noch einmal

Im Testfenster lohnt sich der Blick auf zwei Schaltflächen: Sort by Duration zeigt, welcher Test den Lauf ausbremst. Und der Filter Show Passed lässt sich abschalten — dann stehen nur noch die roten da.

Bei einem fehlgeschlagenen Test ist die Zeile Click to see difference das Ziel: Sie öffnet einen Vergleich zwischen Erwartung und Wirklichkeit, statt beides in einer langen Zeile aneinanderzukleben.

Der HTTP-Client — die Datei requests.http

In den Tutorials liegt eine Datei mit Anfragen im Projekt. Das ist kein selbstgebautes Format, sondern ein eingebautes Werkzeug:

### Alle Lieferanten
GET http://localhost:8080/api/v1/suppliers

### Einen anlegen
POST http://localhost:8080/api/v1/suppliers
Content-Type: application/json

{
"name": "Nordwolle GmbH",
"contact": { "street": "Am Deich 12", "postcode": "28199", "city": "Bremen" }
}

Neben jeder Anfrage erscheint ein grüner Pfeil. Die Antwort landet unten im Fenster — mit Statuscode, Kopfzeilen und formatiertem JSON.

Warum das besser ist, als jedes Mal im Browser oder in einem externen Programm zu klicken:

  • Die Datei liegt im Projekt und wandert mit ins Repository. Wer es klont, hat die Beispielanfragen sofort.
  • Sie ist Dokumentation, die nicht veraltet — wer eine Anfrage ändert, merkt es beim nächsten Ausführen.
  • Die ###-Zeile darüber ist der Name. Sie steht in der Liste der letzten Ausführungen.
Variablen sparen das Suchen und Ersetzen
@host = http://localhost:8080/api/v1

### Alle Lieferanten
GET {{host}}/suppliers

Wenn der Port sich ändert, ändert sich eine Zeile.

Das Datenbank-Werkzeug

Die Leiste Database am rechten Rand verbindet sich direkt mit der PostgreSQL im Container — kein zusätzliches Programm nötig.

Schritt
Verbinden+ → Data Source → PostgreSQL, dann Host localhost, Port, Datenbank, Benutzer und Passwort aus der docker-compose.yml
TreiberBeim ersten Mal bietet IntelliJ Download missing driver files an — bestätigen
PrüfenTest Connection muss grün sein, bevor es weitergeht
AnsehenDoppelklick auf eine Tabelle öffnet ihren Inhalt
AufbauIm selben Fenster der Reiter DDL — dort steht der CREATE TABLE-Befehl mit allen Bedingungen
AbfragenRechtsklick auf die Datenbank → New → Query Console
AuffrischenDie Ansicht aktualisiert sich nicht von selbst — der Kreispfeil oder Ctrl + F5
Das eigentliche Kunststück: die Tabellen sehen, die Hibernate angelegt hat

Wenn spring.jpa.hibernate.ddl-auto=update steht, entstehen die Tabellen aus deinen Entitäten. Was dabei tatsächlich herauskommt — Spaltentypen, Fremdschlüssel, Verknüpfungstabellen — steht nirgends im Quelltext.

Hier kannst du es nachsehen. Der Unterschied zwischen einer 1:n- und einer n:m-Beziehung ist im Schema genau eine Bedingung; siehe Beziehungen mit JPA abbilden.

Wichtig dabei: Die Spaltenansicht zeigt Bedingungen nur zum Teil. Einen Fremdschlüssel markiert sie, eine Unique-Bedingung nicht — Eindeutigkeit ist keine Eigenschaft einer Spalte, sondern ein eigenes Objekt der Tabelle. Sie steht im Reiter DDL und im Baum unter tabellekeys (und noch einmal unter indexes, weil PostgreSQL UNIQUE über einen Index umsetzt). Wer nur auf die Spalten sieht, hält eine 1:1-Beziehung leicht für eine n:1-Beziehung.

Das Maven-Fenster

Rechte Leiste Maven. Zwei Dinge braucht man dort regelmäßig:

  • Reload All Maven Projects (die kreisenden Pfeile) — nach jeder Änderung an der pom.xml. Wenn IntelliJ eine gerade hinzugefügte Bibliothek nicht kennt, ist das fast immer die Ursache.
  • Lifecycle → clean / test / package — dieselben Ziele wie im Terminal, nur zum Anklicken. Mehr dazu im Infoblatt Maven und Abhängigkeiten.

Wenn etwas nicht geht

BeobachtungWas zuerst zu versuchen ist
Eine neue Abhängigkeit wird nicht gefundenMaven-Fenster → Reload All Maven Projects
Alles ist rot, obwohl der Code stimmtFile → Invalidate Caches… → Invalidate and Restart
„Cannot find symbol" nur beim Bauen, nicht im EditorBuild → Rebuild Project
Lombok-Getter werden nicht gefundenSettings → Build → Compiler → Annotation Processors → Häkchen bei Enable annotation processing
Die falsche Java-Version wird benutztFile → Project Structure → Project → SDK
Der falsche Import wird vorgeschlagenImport löschen, Alt + Enter auf dem Bezeichner, aus der Liste den richtigen wählen
Der Port ist belegtVorherigen Lauf im Fenster Run beenden (rotes Quadrat)
Der falsche Import ist in diesem Kurs der häufigste Zeitfresser

Mit Spring Boot 4 haben sich viele Paketpfade geändert. IntelliJ schlägt beim automatischen Import gern die alte Klasse aus einer mitgelieferten Bibliothek vor — der Code lässt sich übersetzen und der Test tut trotzdem nichts.

Bei allem, was mit Tests zu tun hat, lohnt sich der Blick auf die Importzeile. Die richtigen Pfade stehen im Infoblatt Automatisiert testen.

Community oder Ultimate?

FunktionCommunityUltimate
Java, Maven, JUnit, Debugger, Refactorings
Spring Initializr im Neu-Dialog
Datenbank-Werkzeug und SQL-Konsole
HTTP-Client (.http-Dateien)
Spring-Unterstützung (Endpoints-Fenster, Bohnen-Navigation)

Für diesen Kurs wird Ultimate gebraucht. Auszubildende und Studierende bekommen darauf eine kostenlose Lizenz über das JetBrains-Bildungsprogramm — mit der Schulbescheinigung oder der Schul-Mailadresse.

Spickzettel

Shift Shiftalles suchen
Alt + EnterVorschlag anwenden
Ctrl + N / Ctrl + Shift + NKlasse / Datei
Ctrl + Bzur Deklaration
Alt + F7alle Verwendungen
Ctrl + Shift + TKlasse ↔ Test
Alt + Einfgerzeugen
Shift + F6umbenennen
Ctrl + Alt + MMethode extrahieren
Ctrl + Alt + Lformatieren
Ctrl + F8 / Shift + F9Haltepunkt / Debuggen
F8 / F7 / F9weiter / hinein / laufen lassen
Ctrl + Shift + F10Test unter dem Cursor starten
Ctrl + Shift + Fin allen Dateien suchen
Ctrl + Shift + ABefehl suchen, wenn dir das Kürzel fehlt

Das letzte Kürzel ist das nützlichste dieser Liste: Ctrl + Shift + A sucht nach dem Namen eines Befehls und zeigt dir sein Kürzel gleich mit an. Damit lernt man die anderen nebenbei.

Das Wichtigste in Kürze

  • Was du von Hand suchst oder ersetzt, kann die Umgebung meist besser — sie kennt die Bedeutung, nicht nur den Text.
  • Alt + Enter ist der Allzweckgriff, Shift Shift die Suche über alles.
  • Umbenannt wird mit Shift + F6, nie mit Suchen und Ersetzen.
  • Alt + F7 vor jeder Änderung: Wer benutzt das eigentlich?
  • Der Debugger mit bedingtem Haltepunkt ist schneller als jedes println.
  • requests.http ist ein eingebautes Werkzeug und gehört ins Repository.
  • Die Leiste Database zeigt, was Hibernate wirklich angelegt hat.
  • Bei rätselhaften Fehlern: erst Reload Maven, dann Invalidate Caches, dann suchen.

Weiterlesen