透過設定可達到三大目的:
import java.io.*),否則單獨導入每個類。java.*)優先,其次擴展包(javax.*),再來第三方庫、自有公共庫、專案內部類。設定路徑:Project → Project Properties → Java Formating → Imports。
Threshold 頁籤 設定包閾值(預設 0 表示全用通配符),或勾選 Always import classes 強制單獨導入(相當於閾值無窮大):

圖 25 設定包閾值對話框
Sort Order 頁籤 調整導入順序與格式。示例:將 myrefactor.sub1 置於最後並在前方添加空行:
<blank line>。myrefactor.sub1 包。
圖 26 Import 代碼段樣式設定對話框
列表中 <*> 代表其他未匹配包。設定完成後,在專案窗格 <Project Source> 節點右鍵選 Format Package...,勾選 Optimize imports 執行優化。
嚴格說不屬重構範疇(編譯期異常必須捕獲),但實際開發中常作為重構手段。典型「面向編譯」的異常捕獲:
public void autoCatch() {
try {
FileInputStream fis = null;
byte[] bArr = new byte[1024];
fis = new FileInputStream("D:\\1.txt"); // 拋出 FileNotFoundException
fis.read(bArr); // 拋出 IOException
} catch (Exception ex) { } // 一網打盡,無實質處理
}
理應分別捕獲 FileNotFoundException 與 IOException 以獲取詳細錯誤資訊,實現「面向問題」的異常處理。目標重構形式:
public void autoCatch() {
FileInputStream fis = null;
byte[] bArr = new byte[1024];
try {
fis = new FileInputStream("D:\\1.txt");
fis.read(bArr);
} catch (FileNotFoundException ex) {
System.out.println("D:\\1.txt文件不存在,請檢查");
} catch (IOException ex) {
System.out.println("D:\\1.txt文件讀寫發生異常:" + ex.getMessage());
} finally {
if (fis != null) {
try { fis.close(); }
catch (IOException ex1) {
System.out.println("關閉流異常:" + ex1.getMessage());
}
}
}
}
操作:刪除原有 catch 塊,選中 try 區塊代碼 → Ctrl+Shift+C。JBuilder 自動分析並為每個異常生成獨立 catch 塊:
try {
// ...
} catch (FileNotFoundException ex) { }
catch (IOException ex) { }
再手動補充 finally 區塊釋放資源。實戰經驗:Ctrl+Shift+C 優於模板,因能保證異常捕獲塊規範(特殊異常前置、一般異常後置)。
Web 模組的部署描述文件(如 Struts struts-config.xml)可直接重構類名。示例:
<form-bean name="untitled1ActionForm" type="myrefactor.Untitled1ActionForm" />
打開描述文件,游標置於 type 屬性值 → 右鍵 Refactoring → Rename Class for "Untitled1ActionForm":

圖 28 在部署描述文件中重構類名的對話框
輸入新名 UserActionForm 確定,JBuilder 同步修改描述文件屬性值與對應類名。
EJB 設計器掌握 EJB 所有引用類與介面,重構 EJB 類名必須透過 EJB 設計器。若在編輯器或 UML 瀏覽器操作,將出現警告:
WARNING: You are refactoring an EJB file. This may require
that you change some source code and the deployment
descriptor by hand. We recommend using the EJB designer for
most refactoring scenarios.
繼續操作需手動修改相關文件與部署描述符,極易遺漏,建議嚴格在 EJB 設計器中進行。
減少層層委托調用。若 A 擁有成員 B,B 有方法 foo(),C 想透過 A 調用 B.foo(),原需 aObj.bObj.foo()。在 A 中添加代理方法 foo(){bObj.foo();} 後,C 僅需 aObj.foo()。
JBuilder 提供 Delegate to Member 向導。示例 MultiAnimal 類:
package myrefactor;
public class MultiAnimal {
Cat cat = new Cat();
Horse horse = new Horse();
}
打開文件 → Edit → Wizards → Delegate to Member...:

圖 29 代理方法
cat:Cathowl()Public確定後生成代理方法:
public class MultiAnimal {
Cat cat = new Cat();
Horse horse = new Horse();
/**
* Delegate method void howl() to cat : Cat
*/
public void howl() {
cat.howl();
}
}
Edit → Wizards 還提供內部類、欄位、建構子、方法、Javadoc、代碼模板等向導,但除代理向導外較少使用,其他功能有更便捷途徑完成。