🚀 在 VS Code 中取得

瀏覽和編輯 Java 原始碼

Visual Studio Code 首先是一個原始碼編輯器,具有豐富的編輯 功能。 在本文中,我們將介紹一些 Java 特有的功能,這些功能在處理 Java 時很有幫助。

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

程式碼導覽

透過「大綱」檢視,您可以方便地導覽目前檔案中的成員。「專案」檢視也提供您專案的絕佳概觀。 作為 Java 編輯器,它還支援呼叫階層、類型階層、定義導覽、在工作區中搜尋類型等功能。

搜尋符號

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

在工作區中搜尋符號

若要在目前工作區中搜尋符號,請先按下 ⌘T (Windows、Linux Ctrl+T),然後輸入符號的名稱。 潛在符合項目的清單會如先前一樣出現。 如果您選擇在尚未開啟的檔案中找到的符合項目,則會先開啟該檔案,然後再導覽至符合項目的位置。 或者,您也可以使用「快速開啟」( ⌘P (Windows、Linux Ctrl+P)),然後輸入 '#' 命令來搜尋目前工作區。 ⌘T (Windows、Linux Ctrl+T) 只是 '#' 命令的快速鍵,因此一切運作方式都相同。

在目前檔案中搜尋符號

若要在目前檔案中搜尋符號,請使用「快速開啟」( ⌘P (Windows、Linux Ctrl+P)),然後輸入 '@' 命令,接著輸入您要尋找的符號名稱。 潛在符合項目的清單會出現,並在您輸入時進行篩選。 從符合項目清單中選擇以導覽至其位置。

查看定義

您可以使用「查看定義」功能快速查看符號的定義方式。 此功能會在查看視窗中顯示定義附近的幾行程式碼,讓您可以查看而無需離開目前位置。

若要查看符號的定義,請將游標放在原始碼中任何使用該符號的位置,然後按下 ⌥F12 (Windows Alt+F12、Linux Ctrl+Shift+F10)。 或者,您可以從上下文選單中選擇「查看定義」(按一下滑鼠右鍵,然後選擇「查看定義」)。

前往定義

您也可以使用「前往定義」功能快速導覽至符號的定義位置。

若要前往符號的定義,請將游標放在原始碼中任何使用該符號的位置,然後按下 F12。 或者,您可以從上下文選單中選擇「前往定義」(按一下滑鼠右鍵,然後選擇「前往定義」)。 當符號只有一個定義時,您將直接導覽至其位置,否則競爭的定義會如上一節所述在查看視窗中顯示,而您必須選擇您要前往的定義。

前往父類別實作

您可以透過在懸停時按一下「前往父類別實作」連結,來追蹤類別實作和覆寫方法。

Spring Navigation

呼叫階層

「呼叫階層」檢視會顯示從函數呼叫或呼叫函數的所有呼叫,並讓您深入鑽研呼叫者的呼叫者和呼叫的呼叫。 在函數上按一下滑鼠右鍵,然後選取「查看」>「查看呼叫階層」。

Call Hierarchy Peek

您也可以在函數主體中按一下滑鼠右鍵,然後選取「顯示呼叫階層」。

Call Hierarchy Menu

類型階層

「類型階層」檢視會顯示 Java 物件之間的繼承關係。 您可以按一下滑鼠右鍵按一下類型,然後選取「顯示類型階層」。

折疊區域

折疊區域可讓您折疊或展開程式碼片段,以更清楚地檢視原始碼。

智慧選取

透過「智慧選取」(語意選取),您可以根據原始碼中插入號位置的語意資訊來展開或縮小選取範圍。

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

語意醒目提示

語法醒目提示是一項重要功能,可讓您更有效率地閱讀程式碼。 借助「語意醒目提示」的協助,VS Code 可以根據 Java 語言服務提供的符號資訊,提供更精確的原始碼色彩標示。

以下只是一個範例,左側是啟用語意醒目提示後的行為,右側是僅使用語法醒目提示的行為。

Semantic Highlighting

您可以在 Java 語言支援擴充功能 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 支援會自動偵測您程式碼中的問題,並為您提供「快速修正」建議。

如需重構和程式碼動作的詳細資訊,請參閱重構和原始碼動作

IntelliSense

Visual Studio Code 中 Java 的程式碼完成功能是由 Red Hat 的 Language Support for Java™ 提供。 此擴充功能由 Eclipse 背後的相同 Java 開發工具 (JDT) 支援,因此您可以期待相同層級的支援。

此外,還有稱為 IntelliCode 的 AI 輔助 IntelliSense。 它可以將您最有可能使用的項目放在完成清單的頂端,從而節省您的時間。 IntelliCode 建議是根據 GitHub 上數千個擁有超過 100 顆星的開放原始碼專案而制定,因此它會根據高品質專案中最常見的用法進行訓練。 當與您的程式碼上下文結合使用時,完成清單會經過調整以推廣這些實務。 以下是 Java 的 IntelliCode 實際運作情況。

IntelliCode 可與 Java SE 和 Spring 等熱門 Java 程式庫和架構良好搭配運作。 無論您是要執行單體式 Web 應用程式還是現代微服務,它都能為您提供協助。

建立新檔案

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

程式碼片段

Visual Studio Code 支援各種熱門 Java 程式碼片段,以提高您的生產力,例如 class/interface、syserr、sysout、if/else、try/catch、static main method。 透過使用來自 Java 語言伺服器的資訊,它也會在選取期間提供程式碼片段的預覽。

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

Code Snippet

完整的快速鍵清單如下

程式碼片段快速鍵

快速鍵 描述
ctor 公用建構函式
dowhile Do-while 陳述式
foreach、iter 逐一查看陣列或 Iterable
fori 逐一查看陣列
if If 陳述式
ifelse If-else 陳述式
ifnull 檢查 null 的 If 陳述式
ifnotnull 檢查非 null 的 If 陳述式
main、psvm 公用靜態 main 方法
new 建立新物件
private_method 私有方法
private_static_method 私有靜態方法
prf 私有欄位
protected_method 受保護的方法
public_method 公用方法
public_static_method 公用靜態方法
switch Switch 陳述式
syserr、serr 列印至標準錯誤
sysout、sout 列印至標準輸出
systrace、soutm 將目前方法列印至標準輸出
try_catch Try/catch 區塊
try_resources Try-with-resources 陳述式
while While 陳述式

後置程式碼片段快速鍵

快速鍵 範本內容 描述
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) 建立 if 陳述式並檢查運算式是否未解析為 null
null if (expr == null) 建立 if 陳述式,其中檢查運算式是否解析為 null
sysout System.out.println(expr) 將受影響的字串傳送至 System.out.println(..) 呼叫
throw throw expr 擲回指定的例外狀況
var T name = expr 建立新變數
while while (expr) {} 建立 while 迴圈