JBuilder 9.0開發實用技巧七招

來源:互聯網
上載者:User

  同步輸出目錄

  在Java開發過程中,有時候我們要建立一些簡單的類來測試某些功能,測試完成後就從磁碟刪除該類的源檔案,因為我們不想讓該類出現在最終的產品中。但是,雖然源檔案已經被刪除,編譯好的class檔案仍可能留在磁碟上,當有其他的類依賴於該類,就可能導致開發環境的不穩定。

  在JBuilder中,我們可以設定一個編譯選項來同步(Synchronize)Java的源檔案和對應的類,這樣,一旦Java源檔案被刪除,對應的class檔案也將被刪除。按照如下步驟設定該同步選項:

  開啟 Project | Project Properties...

  選擇 Compiler 選項卡,看到如下對話方塊:

  輸出調試資訊

  很多時候,我們要向標準輸出裝置輸出一些簡單的變數值,以便瞭解程式的運行情況。例如,在程式中加入類似下面的代碼:

System.out.println("調試資訊: 變數的值是" + value);

  當編寫和調試代碼的工作結束,接下去就要進行最後的編譯和打包,這時就要刪除所有上面這些System.out.println代碼。為了避免這些麻煩,我們可以引入一個邏輯變數debugMode,把它設定為true,並在輸出調試資訊之前檢查這個變數的值:

if (debugMode)
System.out.println("調試資訊: 變數的值是" + value);

  所有調試工作結束之後,再把debugMode變數設定成false,這樣程式運行時就不會再輸出調試資訊。

  但是,這還不是處理類似調試資訊的最佳辦法,我們可以用Diagnostic類來改進。Diagnostic類有三個與輸出資料流有關的方法,除了標準的System.err輸出資料流,還可以賦予其他不同的輸出資料流(例如檔案或URL)。最重要的是,當編寫和調試代碼的工作結束之後,我們可以在正式編譯時間排除Diagnostic類,從而也就排除了對Diagnostic類方法的所有調用。

  下面是Diagnostic類中可用於輸出資訊的三個方法:

   print(String message):輸出資訊
   println(String message):輸出資訊,並追加行結束符。
   printlnc(String message):輸出帶有行結束符、計數器(它的值不斷遞進)和Tab字元的資訊。

  因此,我們可以把上面的System.out.println替換為:

Diagnostic.printlnc("調試資訊:變數的值是:" + value);

  這些輸出方法的標準輸出裝置是System.err,但我們可以用setLogStream(PrintStream log)方法改變它。例如,假設要把輸出發送到log.txt檔案,只需插入如下代碼:

Diagnostic.setLogStream(new java.io.PrintStream(new
java.io.FileOutputStream("log.txt")));

  最後,在開發期間,我們只需調用一個方法就可以關閉所有的輸出:

Diagnostic.enable(false);

  資源捆綁

  在Java中,要把直接嵌入到程式的字串作為資源使用是很容易的。例如,只要把字串儲存到一個獨立的檔案,我們就可以很方便地通過建立不同的檔案實現對多種語言的支援。

  為了把“寫入程式碼”的字串儲存到資源捆綁檔案,標準Java API提供兩種辦法:

  · 把鍵-值對以屬性檔案的形式儲存到文字檔。

  · 把鍵-值對儲存到Java源檔案中的String[][]數組對象,該Java源檔案從java.util.ListResourceBundle擴充。

  第一種方法具有較好的靈活性,可以在不重新編譯的前提下修改字串值。第二種方法具有較好的效能,但每次修改字串值,包含鍵-值對的Java原始碼檔案都必須重新編譯。JBuilder提供了儲存寫入程式碼字串值的第三種方法,即com.borland.jb.util.ArrayResourceBundle。

  ArrayResourceBundle類通過一個String[]數組對象儲存鍵的值,但不包含鍵,我們可以通過索引訪問值,即第一個值的索引為0,第二個值的索引為1,等等。由於可以直接存取值,因此效能相當好。但也有缺點——維護儲存值的檔案很困難,因為值和鍵之間沒有直接的(直觀的)聯絡。

  異常跟蹤

  在Java中,利用try..catch(..finally)語句可以捕獲和處理異常,非常方便。catch塊的常見異常處理方式是輸出異常,例如把異常輸出到記錄檔。

  Exception類有一個printStackTrace()方法,它能夠從發生異常的方法中輸出堆棧資訊,預設輸出位置是System.err。但是,有時候我們要把堆棧資訊輸出到System.err之外的其他地方,例如在出現異常時把堆棧資訊輸出到email,或者用一個對話方塊顯示出來。

  printStackTrace()方法有幾種不同的類型:

  · printStackTrace(),輸出到標準錯誤流。

  · printStackTrace(PrintStream ps),輸出到名為ps的PrintStream。

  · printStackTrace(PrintWriter pw),輸出到名為pw的PrintWriter。

  我們可以用最後一種printStackTrace()方法把堆棧資訊儲存到String對象。只要在String對象中捕獲了堆棧資訊,我們就可以方便地在應用的任何地方使用這些資訊了。下面的代碼片斷示範了具體的實現步驟:

private String getStackTraceAsString() {
// StringWriter將包含堆棧資訊
StringWriter stringWriter = new StringWriter();
//必須將StringWriter封裝成PrintWriter對象,
//以滿足printStackTrace的要求
PrintWriter printWriter = new PrintWriter(stringWriter);
//擷取堆棧資訊
e.printStackTrace(printWriter);
//轉換成String,並返回該String
StringBuffer error = stringWriter.getBuffer();
return error.toString();
}

  快速查看JavaBean基本資料

  在JBuilder中,要查看JavaBean的內部資訊是非常方便的。我們可以把JavaBean拖入設計視窗中,通過Object Inspector查看JavaBean的屬性和事件。但是,即使不通過設計器,我們也可以查看JavaBean的資訊,這就是使用BeanInsight(菜單:Tools | BeanInsight)。

  點擊Examine Bean按鈕就開始分析指定的JavaBean,在BeanInsight Result地區可以看到分析JavaBean的結果。如果要瞭解更詳細的資訊,點擊“View Details...”按鈕。

  多個行的屬性值

  屬性檔案是儲存應用配置資訊的好方法。有了屬性檔案,修改應用參數時只需修改簡單的屬性文字檔,無需重新編譯整個應用。

  屬性檔案以“鍵-值”對的形式儲存資料。每一個行以鍵開頭,加上一個等於符號,再加上與該鍵對應的值。鍵與值必須在同一個行上,這一點很重要。但是,有些時候,值的內容非常多,如果值能夠分成多行存放,將帶來很大的方便。下面我們就來看看如何使用多行的屬性值。

  首先,下面這個代碼片斷讀取test.properties屬性檔案:

try {
Properties p = new Properties();
File file = new File("test.properties");
FileInputStream fis = new FileInputStream(file);
p.load(fis);
} catch (IOException ioex) {
ioex.printStackTrace();
}

  Properties類的load()方法需要一個輸入資料流作為參數,這裡我們向它傳入了一個FileInputStream對象。

  接下來,我們就可以通過調用getProperty()方法從Properties對象擷取屬性值。下面我們來看看test.properties屬性檔案的內容:

singleline=Single line value
multiline =This example shows how we
can write a property
value over multiple lines in a
properties file

  這個屬性檔案儲存了兩個屬性,鍵分別是singleline和multiline。singleline的值只有一行,而multiline的值有多行。

  如果我們調用Properties對象的getProperty()方法,並輸出屬性值,結果將是:

  調用:

System.out.println("singleline? " + p.getProperty("singleline"));
System.out.println("multiline ? " + p.getProperty("multiline"));

  結果:

singleline? Single line value
multiline ? This example shows how we

  multiline屬性只包含了第一行值。那麼,如何解決這個問題呢?其實很簡單,只需要在每個行的末尾加上逸出字元“/”就可以了。修改後的屬性檔案如下所示:

singleline=Single line value
multiline =This example shows how we /
can write a property /
value over multiple lines in a /
properties file

  再次讀取屬性檔案的值,multiline的屬性值就能夠完整地讀取出來

  注意Synchronize output dir選項。選中該選項就可以實現輸出目錄同步,每次編譯時間JBuilder將保證Java源檔案與Java class檔案的同步。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.