Java-Quellcode navigieren und bearbeiten
Visual Studio Code ist in erster Linie ein Quellcode-Editor mit umfangreichen Bearbeitungsfunktionen. In diesem Dokument gehen wir auf einige Java-spezifische Funktionen ein, die bei der Arbeit mit Java hilfreich sind.
Wenn bei der Verwendung der unten aufgeführten Funktionen Probleme auftreten, können Sie uns kontaktieren, indem Sie ein Problem melden.
Code-Navigation
Mit der Gliederungsansicht (Outline) können Sie bequem durch die Member innerhalb der aktuellen Datei navigieren. Die Projektansicht bietet zudem einen großartigen Überblick über Ihr Projekt. Als Java-Editor unterstützt er außerdem Aufrufhierarchien, Typenhierarchien, Definitionsnavigation, die Suche nach Typen im Arbeitsbereich usw.
Nach Symbolen suchen
Sie können nach Symbolen in der aktuellen Datei oder im Arbeitsbereich suchen, um schneller durch Ihren Code zu navigieren.
Nach Symbolen im Arbeitsbereich suchen
Um nach einem Symbol im aktuellen Arbeitsbereich zu suchen, drücken Sie zunächst ⌘T (Windows, Linux Ctrl+T) und geben dann den Namen des Symbols ein. Wie zuvor erscheint eine Liste potenzieller Treffer. Wenn Sie einen Treffer auswählen, der sich in einer noch nicht geöffneten Datei befindet, wird die Datei geöffnet, bevor zur Position des Treffers navigiert wird. Alternativ können Sie auch die Schnellöffnung (⌘P (Windows, Linux Ctrl+P)) verwenden und dann den Befehl '#' eingeben, um den aktuellen Arbeitsbereich zu durchsuchen. ⌘T (Windows, Linux Ctrl+T) ist lediglich die Tastenkombination für den '#'-Befehl; die Funktionsweise ist identisch.
Nach Symbolen in der aktuellen Datei suchen
Um nach einem Symbol in der aktuellen Datei zu suchen, verwenden Sie die Schnellöffnung (⌘P (Windows, Linux Ctrl+P)), geben den Befehl '@' und anschließend den Namen des gesuchten Symbols ein. Eine Liste potenzieller Treffer erscheint und wird während der Eingabe gefiltert. Wählen Sie aus der Liste der Treffer aus, um zu deren Position zu navigieren.
Definition anzeigen
Sie können sich mit der Funktion "Definition einsehen" (Peek Definition) einen schnellen Überblick darüber verschaffen, wie ein Symbol definiert wurde. Diese Funktion zeigt einige Zeilen Code nahe der Definition in einem kleinen Fenster an, sodass Sie einen Blick darauf werfen können, ohne Ihren aktuellen Standort im Code zu verlassen.
Um eine Symboldefinition einzusehen, platzieren Sie den Cursor auf dem Symbol an einer beliebigen Stelle, an der es in Ihrem Quellcode verwendet wird, und drücken Sie ⌥F12 (Windows Alt+F12, Linux Ctrl+Shift+F10). Alternativ können Sie im Kontextmenü (Rechtsklick) Peek Definition (Definition einsehen) wählen.
Zur Definition springen
Sie können auch schnell zu der Stelle navigieren, an der ein Symbol definiert ist, indem Sie die Funktion "Zu Definition springen" (Go to Definition) verwenden.
Um zur Definition eines Symbols zu springen, platzieren Sie den Cursor auf dem Symbol und drücken Sie F12. Alternativ können Sie im Kontextmenü Go to Definition (Zu Definition springen) wählen. Wenn es nur eine Definition des Symbols gibt, navigieren Sie direkt zu dieser Position; andernfalls werden die konkurrierenden Definitionen in einem Fenster angezeigt, wie im vorherigen Abschnitt beschrieben, und Sie müssen die gewünschte Definition auswählen.
Zur Super-Implementierung springen
Sie können den Überblick über Klassenimplementierungen und überschreibende Methoden behalten, indem Sie beim Drüberfahren (Hover) auf den Link Go to Super Implementation klicken.

Aufrufhierarchie
Die Ansicht "Aufrufhierarchie" zeigt alle Aufrufe von oder zu einer Funktion und ermöglicht es Ihnen, tief in die Aufrufer der Aufrufer einzutauchen. Rechtsklicken Sie auf eine Funktion und wählen Sie Peek > Peek Call Hierarchy.

Sie können auch mit der rechten Maustaste in einen Funktionskörper klicken und Show Call Hierarchy auswählen.

Typenhierarchie
Die Ansicht "Typenhierarchie" zeigt die Vererbungsbeziehungen zwischen Java-Objekten. Sie können mit der rechten Maustaste auf einen Typ klicken und Show Type Hierarchy wählen.
Codebereiche falten
Mit faltbaren Bereichen können Sie Codeausschnitte ein- oder ausblenden, um den Quellcode besser zu lesen.
Smarte Auswahl
Mit der Smart Selection (semantische Auswahl) können Sie den Auswahlbereich basierend auf den semantischen Informationen der Cursorposition in Ihrem Quellcode erweitern oder verkleinern.
- Um die Auswahl zu erweitern, verwenden Sie ⌃⇧⌘→ (Windows, Linux Shift+Alt+Right).
- Um die Auswahl zu verkleinern, verwenden Sie ⌃⇧⌘← (Windows, Linux Shift+Alt+Left).
Semantisches Hervorheben
Syntaxhervorhebung ist eine wichtige Funktion, die es Ihnen ermöglicht, Code effizienter zu lesen. Mit Hilfe von semantischem Hervorheben kann VS Code eine genauere Farbgebung des Quellcodes basierend auf Symbolinformationen des Java-Sprachdienstes bereitstellen.
Unten sehen Sie nur ein Beispiel: Links ist das Verhalten nach der Aktivierung des semantischen Hervorhebens, rechts dasjenige mit nur Syntaxhervorhebung.

Weitere Details zum semantischen Java-Hervorheben finden Sie im Wiki der Java Language Support-Erweiterung.
Code-Navigation mit Spring Boot
Die Erweiterung Spring Boot Tools bietet verbesserte Navigation und Unterstützung bei der Codevervollständigung für Spring Boot-Projekte.
@/zeigt alle definierten Request-Mappings (zugeordneter Pfad, Request-Methode, Quellort)@+zeigt alle definierten Beans (Bean-Name, Bean-Typ, Quellort)@>zeigt alle Funktionen (Prototyp-Implementierung)@zeigt alle Spring-Annotationen im Code

Um mehr über die Spring Boot-Unterstützung in Visual Studio Code zu erfahren, lesen Sie Spring Boot in Visual Studio Code.
Code bearbeiten
Das Bearbeiten von Code ist dank IntelliSense für smarte Codevervollständigungen und Signaturdetails ebenfalls einfach. Sie können Code-Snippets sowie verschiedene Code-Aktionen verwenden, wie etwa das Generieren von Gettern/Settern und das Organisieren von Imports, um Ihre Produktivität weiter zu steigern.
Die Java-Unterstützung in Visual Studio Code erkennt Probleme innerhalb Ihres Codes automatisch und bietet Ihnen Vorschläge für Schnellkorrekturen (Quick Fixes).
Weitere Details zum Refactoring und zu Code-Aktionen finden Sie unter Refactoring und Quellcode-Aktionen.
IntelliSense
Die Codevervollständigung für Java in Visual Studio Code wird bereitgestellt durch Language Support for Java™ by Red Hat. Die Erweiterung basiert auf denselben Java Development Tools (JDT), die auch Eclipse zugrunde liegen, sodass Sie dasselbe Unterstützungsniveau erwarten können.
Darüber hinaus gibt es ein KI-gestütztes IntelliSense namens IntelliCode. Es spart Ihnen Zeit, indem es die Elemente, die Sie am wahrscheinlichsten verwenden werden, ganz oben in Ihre Vervollständigungsliste setzt. Die Empfehlungen von IntelliCode basieren auf Tausenden von Open-Source-Projekten auf GitHub mit jeweils über 100 Sternen und wurden somit auf den häufigsten Nutzungen aus qualitativ hochwertigen Projekten trainiert. In Kombination mit dem Kontext Ihres Codes ist die Vervollständigungsliste darauf zugeschnitten, diese Praktiken zu fördern. Hier ist IntelliCode für Java in Aktion.
IntelliCode funktioniert gut mit beliebten Java-Bibliotheken und Frameworks wie Java SE und Spring. Es hilft Ihnen, egal ob Sie monolithische Web-Apps oder moderne Microservices entwickeln.
Neue Datei erstellen
VS Code unterstützt die Anwendung von Vorlagen beim Erstellen einer Java-Quelldatei. Wenn Sie eine .java-Datei im Datei-Explorer erstellen, generiert der Sprachserver automatisch den Klassenkörper und füllt die Paketinformationen für Sie aus.
Code-Schnipsel
Visual Studio Code unterstützt eine breite Palette beliebter Java-Code-Snippets, um Ihre Produktivität zu steigern, wie z. B. class/interface, syserr, sysout, if/else, try/catch, static main method. Unter Verwendung von Informationen des Java-Sprachservers bietet es auch eine Vorschau des Code-Snippets während der Auswahl.
Zum Beispiel erzeugt die Eingabe von "sout" oder "sysout" ein Code-Snippet für System.out.println().
Ähnlich erzeugt die Eingabe von "main" oder "psvm" ein Code-Snippet für public static void main(String[] args) {}.

Die vollständige Liste der Tastenkürzel finden Sie unten
Tastenkürzel für Code-Snippets
| Tastenkürzel | Beschreibung |
|---|---|
| ctor | Öffentlicher Konstruktor |
| dowhile | Do-while-Anweisung |
| foreach, iter | Über ein Array oder Iterable iterieren |
| fori | Über ein Array iterieren |
| if | If-Anweisung |
| ifelse | If-else-Anweisung |
| ifnull | If-Anweisung mit Prüfung auf null |
| ifnotnull | If-Anweisung mit Prüfung auf nicht null |
| main, psvm | Public static main-Methode |
| new | Neues Objekt erstellen |
| private_method | Private Methode |
| private_static_method | Private statische Methode |
| prf | Privates Feld |
| protected_method | Protected-Methode |
| public_method | Öffentliche Methode |
| public_static_method | Öffentliche statische Methode |
| switch | Switch-Anweisung |
| syserr, serr | Ausgabe auf Standard-Err |
| sysout, sout | Ausgabe auf Standard-Out |
| systrace, soutm | Aktuelle Methode auf Standard-Out ausgeben |
| try_catch | Try/catch-Block |
| try_resources | Try-with-resources-Anweisung |
| while | While-Anweisung |
Tastenkürzel für Postfix-Snippets
| Tastenkürzel | Vorlageninhalt | Beschreibung |
|---|---|---|
| cast | ((SomeType) expr) | Castet den Ausdruck in einen neuen Typ |
| else | if (!expr) | Erstellt eine negierte If-Anweisung |
| for | for (T item : expr) | Erstellt eine for-Anweisung |
| fori | for (int i = 0; i < expr.length; i++) | Erstellt eine for-Anweisung, die über ein Array iteriert |
| forr | for (int i = expr.length-1; i >= 0; i--) | Erstellt eine for-Anweisung, die in umgekehrter Reihenfolge über ein Array iteriert |
| if | if (expr) | Erstellt eine If-Anweisung |
| nnull | if (expr != null) | Erstellt eine If-Anweisung und prüft, ob der Ausdruck nicht null ist |
| null | if (expr == null) | Erstellt eine If-Anweisung, die prüft, ob der Ausdruck null ist |
| sysout | System.out.println(expr) | Sendet den betroffenen String an einen System.out.println(..)-Aufruf |
| throw | throw expr | Wirft die angegebene Exception |
| var | T name = expr | Erstellt eine neue Variable |
| while | while (expr) {} | Erstellt eine while-Schleife |