瀏覽和編輯 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 Tools 擴充功能為 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 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) {}
的程式碼片段。
完整的快速鍵清單如下
程式碼片段快速鍵
快速鍵 | 描述 |
---|---|
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 迴圈 |