首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JBuilder 2005 雜項重構實用指南:Import 優化、異常捕獲、部署描述、EJB 與代理方法

     編輯:Java 相關知識

一、優化 Import

透過設定可達到三大目的:

  • 移除未使用的 import 語句。
  • 設定包閾值:引用類數超過閾值時採用通配符導入整個包(如 import java.io.*),否則單獨導入每個類。
  • 設定包排序順序:按常用程度遞減排列,通常 JDK 核心包(java.*)優先,其次擴展包(javax.*),再來第三方庫、自有公共庫、專案內部類。

設定路徑:Project → Project Properties → Java Formating → Imports。

Threshold 頁籤 設定包閾值(預設 0 表示全用通配符),或勾選 Always import classes 強制單獨導入(相當於閾值無窮大):

圖 25 設定包閾值對話框

Sort Order 頁籤 調整導入順序與格式。示例:將 myrefactor.sub1 置於最後並在前方添加空行:

  1. 點擊 Add blank line 添加 <blank line>。
  2. 點擊 Add prefix... 選擇 myrefactor.sub1 包。
  3. 確定保存。

圖 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 類名必須透過 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 代理方法

  • Select class:當前類
  • Select member:選 cat:Cat
  • Available methods:展開介面選 howl()
  • Visibility:Public
  • Generate Javadoc:預設

確定後生成代理方法:

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、代碼模板等向導,但除代理向導外較少使用,其他功能有更便捷途徑完成。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved