瀏覽與編輯 Java 原始程式碼

Visual Studio Code 首先是一個原始程式碼編輯器,具備豐富的編輯功能。在本文中,我們將介紹一些對 Java 開發人員特別實用的 Java 專屬功能。

如果您在使用以下功能時遇到任何問題,可以透過提交 issue (問題單) 來與我們聯繫。

程式碼導覽

透過 大綱檢視 (Outline view),您可以輕鬆地瀏覽目前檔案中的成員。 專案檢視 (Projects view) 也提供了專案的絕佳概覽。身為一個 Java 編輯器,它還支援呼叫階層、類型階層、定義導航、工作區類型搜尋等功能。

搜尋符號

您可以搜尋目前檔案或工作區中的符號,以便更快速地瀏覽程式碼。

搜尋工作區中的符號

若要搜尋目前工作區中的符號,請先按 ⌘T (Windows, Linux Ctrl+T),然後輸入符號名稱。與先前一樣,將會出現潛在符合項目的清單。如果您選擇的符合項目位於尚未開啟的檔案中,該檔案將會在導航至該位置前先行開啟。或者,您也可以使用 快速開啟 (Quick Open) (⌘P (Windows, Linux Ctrl+P)),然後輸入「#」指令來搜尋目前工作區。⌘T (Windows, Linux Ctrl+T) 只是「#」指令的捷徑,功能完全相同。

搜尋目前檔案中的符號

若要搜尋目前檔案中的符號,請使用 快速開啟 (Quick Open) (⌘P (Windows, Linux Ctrl+P)),輸入「@」指令,然後輸入您要尋找的符號名稱。潛在符合項目的清單將會出現,並隨著您的輸入進行篩選。從清單中選擇一個項目即可跳轉至該位置。

預覽定義

您可以透過「預覽定義 (Peek Definition)」功能快速查看符號的定義方式。此功能會在預覽視窗中顯示定義附近的幾行程式碼,讓您無需離開目前的位置即可進行查看。

若要預覽符號定義,請將游標置於原始程式碼中該符號的任何使用處,然後按下 ⌥F12 (Windows Alt+F12, Linux Ctrl+Shift+F10)。或者,您可以從內容選單中選擇 預覽定義 (Peek Definition)(按右鍵,然後選擇 預覽定義)。

移至定義

您也可以使用「前往定義 (Go to Definition)」功能,快速跳轉至符號定義的位置。

若要前往符號定義,請將游標置於原始程式碼中該符號的任何使用處,然後按下 F12。或者,您可以從內容選單中選擇 前往定義 (Go to Definition)(按右鍵,然後選擇 前往定義)。當符號只有一個定義時,您會直接跳轉至該位置;否則,會如前一節所述,在預覽視窗中顯示所有衝突的定義,您需要選擇想要前往的定義。

前往超級實作 (Super Implementation)

您可以透過點擊懸停時出現的 前往超級實作 (Go to Super Implementation) 連結,來追蹤類別實作與覆寫的方法。

Spring Navigation

呼叫階層 (Call Hierarchy)

「呼叫階層 (Call Hierarchy)」檢視會顯示函式的所有來電或去電,並允許您深入查看呼叫者的呼叫者,以及呼叫所呼叫的函式。在函式上按右鍵並選擇 預覽 (Peek) > 預覽呼叫階層 (Peek Call Hierarchy)

Call Hierarchy Peek

您也可以在函式主體中按右鍵,選擇 顯示呼叫階層 (Show Call Hierarchy)

Call Hierarchy Menu

類型階層 (Type Hierarchy)

「類型階層 (Type Hierarchy)」檢視會顯示 Java 物件之間的繼承關係。您可以對類型按右鍵並選擇 顯示類型階層 (Show Type Hierarchy)

摺疊區域

摺疊區域允許您摺疊或展開程式碼片段,以更方便地檢視原始程式碼。

智慧選取 (Smart Selection)

透過 智慧選取 (Smart Selection)(語意選取),您可以根據原始程式碼中插入點位置的語意資訊,擴大或縮小選取範圍。

  • 若要擴大選取範圍,請使用 ⌃⇧⌘→ (Windows, Linux Shift+Alt+Right)
  • 若要縮小選取範圍,請使用 ⌃⇧⌘← (Windows, Linux Shift+Alt+Left)

語意突顯 (Semantic Highlighting)

語法突顯是讓您更有效率閱讀程式碼的重要功能。藉由 語意突顯 (Semantic Highlighting) 的協助,VS Code 能根據 Java 語言服務提供的符號資訊,提供更精確的原始程式碼色彩顯示。

下方僅為其中一個範例,左側為啟用語意突顯後的行為,右側則僅有語法突顯。

Semantic Highlighting

您可以前往 Java 語言支援延伸模組維基 (Java Language Support extension wiki),進一步瞭解 Java 語意突顯的詳細資訊。

使用 Spring Boot 瀏覽程式碼

Spring Boot Tools 延伸模組為 Spring Boot 專案提供了增強的導航與程式碼補全支援。

  • @/ 顯示所有定義的請求映射(對應路徑、請求方法、原始碼位置)
  • @+ 顯示所有定義的 Bean(Bean 名稱、Bean 類型、原始碼位置)
  • @> 顯示所有函式(原型實作)
  • @ 顯示程式碼中所有的 Spring 註解

Spring Navigation

若要進一步瞭解 Visual Studio Code 的 Spring Boot 支援,請閱讀 Visual Studio Code 中的 Spring Boot

程式碼編輯

透過 IntelliSense 的智慧程式碼補全與簽章詳細資訊,編輯程式碼變得輕鬆簡單。您還可以使用程式碼片段以及各種程式碼動作(例如產生 Getter/Setter 和整理匯入內容),進一步提升生產力。

Visual Studio Code 中的 Java 支援會自動偵測您程式碼中的問題,並提供「快速修復 (Quick Fix)」建議。

關於重構與程式碼動作的更多詳細資訊,請參閱 重構與來源動作 (Refactoring and Source Actions)

IntelliSense

Visual Studio Code 的 Java 程式碼補全功能由 Language Support for Java™ by Red Hat 提供。此延伸模組由 Eclipse 背後的相同 Java 開發工具 (JDT) 提供支援,因此您可以期待相同等級的支援水準。

此外,還有一種稱為 IntelliCode 的 AI 輔助 IntelliSense。它會將您最可能使用的項目置於補全清單的最上方,從而節省您的時間。IntelliCode 的建議是基於 GitHub 上數千個擁有超過 100 顆星的開源專案所訓練的,因此它學習了來自高品質專案中最常見的用法。當結合您的程式碼上下文時,補全清單會經過量身打造以推薦這些實踐。以下是 Java 版 IntelliCode 的實際運作效果。

IntelliCode 可與 Java SE 和 Spring 等熱門 Java 函式庫及框架完美搭配。無論您是開發單體式網頁應用程式或現代微服務,它都能為您提供協助。

建立新檔案

VS Code 支援在建立 Java 原始檔時套用範本。當您在檔案總管中建立一個 .java 檔案時,語言伺服器會自動為您產生類別主體並填入套件資訊。

程式碼片段

Visual Studio Code 支援多種熱門 Java 程式碼片段以提升您的生產力,例如 class/interface、syserr、sysout、if/else、try/catch 以及 static main 方法。利用 Java 語言伺服器的資訊,它還能在您選取時提供程式碼片段的預覽。

例如,輸入「sout」或「sysout」將會產生 System.out.println() 的程式碼片段。
同樣地,輸入「main」或「psvm」將會產生 public static void main(String[] args) {} 的程式碼片段。

Code Snippet

完整的捷徑清單列於下方

程式碼片段捷徑

捷徑鍵 description
ctor 公用建構函式 (Public constructor)
dowhile Do-while 陳述式
foreach, iter 迭代陣列或 Iterable 物件
fori 迭代陣列
if If 陳述式
ifelse If-else 陳述式
ifnull 檢查 null 的 If 陳述式
ifnotnull 檢查非 null 的 If 陳述式
main, psvm 公用靜態 main 方法 (Public static main method)
new 建立新物件 (Create new Object)
private_method 私有方法 (Private method)
private_static_method 私有靜態方法 (Private static method)
prf 私有欄位 (Private field)
protected_method 保護方法 (Protected method)
public_method 公用方法 (Public method)
public_static_method 公用靜態方法 (Public static method)
switch Switch 陳述式
syserr, serr 列印至標準錯誤 (Print to standard err)
sysout, sout 列印至標準輸出 (Print to standard out)
systrace, soutm 將目前方法列印至標準輸出
try_catch Try/catch 區塊
try_resources Try-with-resources 陳述式
while While 陳述式

後置程式碼片段捷徑 (Postfix snippet shortcuts)

捷徑鍵 範本內容 description
cast ((SomeType) expr) 將運算式轉型為新類型
else if (!expr) 建立一個否定的 if 陳述式
for for (T item : expr) 建立一個 for 陳述式
fori for (int i = 0; i < expr.length; i++) 建立一個迭代陣列的 for 陳述式
forr for (int i = expr.length-1; i >= 0; i--) 建立一個反向迭代陣列的 for 陳述式
if if (expr) 建立一個 if 陳述式
nnull if (expr != null) 建立一個檢查運算式是否不為 null 的 if 陳述式
null if (expr == null) 建立一個檢查運算式是否為 null 的 if 陳述式
sysout System.out.println(expr) 將目標字串送至 System.out.println(..) 呼叫
throw throw expr 擲回給定的例外狀況 (Exception)
var T name = expr 建立一個新變數
while while (expr) {} 建立一個 while 迴圈
© . This site is unofficial and not affiliated with Microsoft.