🚀 在 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 工具 擴充功能為 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 程式庫和架構,例如 Java SE 和 Spring。無論您是開發單體式 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 檢查 Not 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) 建立檢查運算式是否解析為 Null 的 If 陳述式
sysout System.out.println(expr) 將受影響的字串傳送至 System.out.println(..) 呼叫
throw throw expr 擲回指定的例外狀況
var T name = expr 建立新變數
while while (expr) {} 建立 While 迴圈