瀏覽和編輯 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。或者,您可以從上下文選單中選擇「移至定義」(按一下滑鼠右鍵,然後選擇「移至定義」)。當符號只有一個定義時,您將直接導覽至其位置,否則,競爭的定義會顯示在預覽視窗中,如前一節所述,您必須選擇您要前往的定義。
移至父類別實作
您可以透過按一下懸停時的「移至父類別實作」連結,追蹤類別實作和覆寫方法。
呼叫階層
「呼叫階層」檢視會顯示從函式或到函式的所有呼叫,並讓您深入探究呼叫者的呼叫者和呼叫的呼叫。在函式上按一下滑鼠右鍵,然後選取「預覽」>「預覽呼叫階層」。
您也可以在函式主體中按一下滑鼠右鍵,然後選取「顯示呼叫階層」。
類型階層
「類型階層」檢視會顯示 Java 物件之間的繼承關係。您可以按一下滑鼠右鍵選取類型,然後選取「顯示類型階層」。
折疊區域
「折疊區域」可讓您折疊或展開程式碼片段,以便更好地檢視原始碼。
智慧選取
透過「智慧選取」(語意選取),您可以根據游標位置在原始碼中的語意資訊來展開或縮小選取範圍。
- 若要展開選取範圍,請使用 ⌃⇧⌘→ (Windows、Linux Shift+Alt+Right)。
- 若要縮小選取範圍,請使用 ⌃⇧⌘← (Windows、Linux Shift+Alt+Left)。
語意醒目提示
語法醒目提示是一項重要的功能,可讓您更有效率地閱讀程式碼。在 語意醒目提示 的協助下,VS Code 可以根據 Java 語言服務的符號資訊,提供更精確的原始碼色彩標示。
以下只是一個範例,左側是啟用語意醒目提示後的行為,右側是僅使用語法醒目提示的行為。
您可以在 Java 語言支援擴充功能的 Wiki 上深入瞭解 Java 語意醒目提示的詳細資訊。
使用 Spring Boot 導覽程式碼
Spring Boot 工具 擴充功能為 Spring Boot 專案提供強化的導覽和程式碼完成支援。
@/
顯示所有已定義的要求對應 (對應路徑、要求方法、來源位置)@+
顯示所有已定義的 Bean (Bean 名稱、Bean 類型、來源位置)@>
顯示所有函式 (原型實作)@
顯示程式碼中的所有 Spring 註解
若要深入瞭解 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) {}
的程式碼片段。
完整的快速鍵清單如下所示
程式碼片段快速鍵
快速鍵 | 描述 |
---|---|
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 迴圈 |