国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

JBuilder 9.0開發(fā)實用技巧七招

2019-11-18 12:02:55
字體:
供稿:網(wǎng)友

  同步輸出目錄
  在java開發(fā)過程中,有時候我們要創(chuàng)建一些簡單的類來測試某些功能,測試完成后就從磁盤刪除該類的源文件,因為我們不想讓該類出現(xiàn)在最終的產(chǎn)品中。但是,雖然源文件已經(jīng)被刪除,編譯好的class文件仍可能留在磁盤上,當(dāng)有其他的類依靠于該類,就可能導(dǎo)致開發(fā)環(huán)境的不穩(wěn)定。
  
  在JBuilder中,我們可以設(shè)置一個編譯選項來同步(Synchronize)Java的源文件和對應(yīng)的類,這樣,一旦Java源文件被刪除,對應(yīng)的class文件也將被刪除。按照如下步驟設(shè)置該同步選項:
  
  打開 PRoject Project Properties...
  
  選擇 Compiler 選項卡,看到如下對話框:
  
 JBuilder 9.0開發(fā)實用技巧七招(圖一)


  注重Synchronize output dir選項。選中該選項就可以實現(xiàn)輸出目錄同步,每次編譯時JBuilder將保證Java源文件與Java class文件的同步。
  輸出調(diào)試信息
  
  很多時候,我們要向標(biāo)準(zhǔn)輸出設(shè)備輸出一些簡單的變量值,以便了解程序的運(yùn)行情況。例如,在程序中加入類似下面的代碼:
  
  System.out.println("調(diào)試信息: 變量的值是" + value);
  
  當(dāng)編寫和調(diào)試代碼的工作結(jié)束,接下去就要進(jìn)行最后的編譯和打包,這時就要刪除所有上面這些System.out.println代碼。為了避免這些麻煩,我們可以引入一個邏輯變量debugMode,把它設(shè)置為true,并在輸出調(diào)試信息之前檢查這個變量的值:
  
  if (debugMode)
  System.out.println("調(diào)試信息: 變量的值是" + value);
  
  所有調(diào)試工作結(jié)束之后,再把debugMode變量設(shè)置成false,這樣程序運(yùn)行時就不會再輸出調(diào)試信息。
  
  但是,這還不是處理類似調(diào)試信息的最佳辦法,我們可以用Diagnostic類來改進(jìn)。Diagnostic類有三個與輸出流有關(guān)的方法,除了標(biāo)準(zhǔn)的System.err輸出流,還可以賦予其他不同的輸出流(例如文件或URL)。最重要的是,當(dāng)編寫和調(diào)試代碼的工作結(jié)束之后,我們可以在正式編譯時排除Diagnostic類,從而也就排除了對Diagnostic類方法的所有調(diào)用。
  
  下面是Diagnostic類中可用于輸出信息的三個方法:
  
  print(String message):輸出信息
  println(String message):輸出信息,并追加行結(jié)束符。
  printlnc(String message):輸出帶有行結(jié)束符、計數(shù)器(它的值不斷遞進(jìn))和Tab字符的信息。
  
  因此,我們可以把上面的System.out.println替換為:
  
  Diagnostic.printlnc("調(diào)試信息:變量的值是:" + value);
  
  這些輸出方法的標(biāo)準(zhǔn)輸出設(shè)備是System.err,但我們可以用setLogStream(PrintStream log)方法改變它。例如,假設(shè)要把輸出發(fā)送到log.txt文件,只需插入如下代碼:
  
  Diagnostic.setLogStream(new java.io.PrintStream(new
  java.io.FileOutputStream("log.txt")));
  
  最后,在開發(fā)期間,我們只需調(diào)用一個方法就可以關(guān)閉所有的輸出:
  
  Diagnostic.enable(false);
  
  資源捆綁
  在Java中,要把直接嵌入到程序的字符串作為資源使用是很輕易的。例如,只要把字符串保存到一個獨(dú)立的文件,我們就可以很方便地通過創(chuàng)建不同的文件實現(xiàn)對多種語言的支持。
  
  為了把“硬編碼”的字符串保存到資源捆綁文件,標(biāo)準(zhǔn)Java API提供兩種辦法:
  
  • 把鍵-值對以屬性文件的形式保存到文本文件。
  
  • 把鍵-值對保存到Java源文件中的String[][]數(shù)組對象,該Java源文件從java.util.ListResourceBundle擴(kuò)展。
  
  第一種方法具有較好的靈活性,可以在不重新編譯的前提下修改字符串值。第二種方法具有較好的性能,但每次修改字符串值,包含鍵-值對的Java源代碼文件都必須重新編譯。JBuilder提供了保存硬編碼字符串值的第三種方法,即com.borland.jb.util.ArrayResourceBundle。
  
  ArrayResourceBundle類通過一個String[]數(shù)組對象保存鍵的值,但不包含鍵,我們可以通過索引訪問值,即第一個值的索引為0,第二個值的索引為1,等等。由于可以直接訪問值,因此性能相當(dāng)好。但也有缺點——維護(hù)保存值的文件很困難,因為值和鍵之間沒有直接的(直觀的)聯(lián)系。
  異常跟蹤
  
  在Java中,利用try..catch(..finally)語句可以捕捉和處理異常,非常方便。catch塊的常見異常處理方式是輸出異常,例如把異常輸出到日志文件。
  
  Exception類有一個printStackTrace()方法,它能夠從發(fā)生異常的方法中輸出堆棧信息,默認(rèn)輸出位置是System.err。但是,有時候我們要把堆棧信息輸出到System.err之外的其他地方,例如在出現(xiàn)異常時把堆棧信息輸出到email,或者用一個對話框顯示出來。
  
  printStackTrace()方法有幾種不同的類型:
  
  • printStackTrace(),輸出到標(biāo)準(zhǔn)錯誤流。
  
  • printStackTrace(PrintStream ps),輸出到名為ps的PrintStream。
  
  • printStackTrace(PrintWriter pw),輸出到名為pw的PrintWriter。
  
  我們可以用最后一種printStackTrace()方法把堆棧信息保存到String對象。只要在String對象中捕捉了堆棧信息,我們就可以方便地在應(yīng)用的任何地方使用這些信息了。下面的代碼片斷示范了具體的實現(xiàn)步驟:
  
  private String getStackTraceAsString() {
  // StringWriter將包含堆棧信息
  StringWriter stringWriter = new StringWriter();
  //必須將StringWriter封裝成PrintWriter對象,
  //以滿足printStackTrace的要求
  PrintWriter printWriter = new PrintWriter(stringWriter);
  //獲取堆棧信息
  e.printStackTrace(printWriter);
  //轉(zhuǎn)換成String,并返回該String
  StringBuffer error = stringWriter.getBuffer();
  return error.toString();
  }
  
  快速查看JavaBean基本信息
  在JBuilder中,要查看JavaBean的內(nèi)部信息是非常方便的。我們可以把JavaBean拖入設(shè)計窗口中,通過Object Inspector查看JavaBean的屬性和事件。但是,即使不通過設(shè)計器,我們也可以查看JavaBean的信息,這就是使用BeanInsight(菜單:Tools BeanInsight)。
  
JBuilder 9.0開發(fā)實用技巧七招(圖二)

  點擊Examine Bean按鈕就開始分析指定的JavaBean,在BeanInsight Result區(qū)域可以看到分析JavaBean的結(jié)果。假如要了解更具體的信息,點擊“View Details...”按鈕。
  
  多個行的屬性值
  屬性文件是保存應(yīng)用配置信息的好方法。有了屬性文件,修改應(yīng)用參數(shù)時只需修改簡單的屬性文本文件,無需重新編譯整個應(yīng)用。
  
  屬性文件以“鍵-值”對的形式保存數(shù)據(jù)。每一個行以鍵開頭,加上一個等于符號,再加上與該鍵對應(yīng)的值。鍵與值必須在同一個行上,這一點很重要。但是,有些時候,值的內(nèi)容非常多,假如值能夠分成多行存放,將帶來很大的方便。下面我們就來看看如何使用多行的屬性值。
  
  首先,下面這個代碼片斷讀取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()方法需要一個輸入流作為參數(shù),這里我們向它傳入了一個FileInputStream對象。
  
  接下來,我們就可以通過調(diào)用getProperty()方法從Properties對象獲取屬性值。下面我們來看看test.properties屬性文件的內(nèi)容:
  
  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的值有多行。
  
  假如我們調(diào)用Properties對象的getProperty()方法,并輸出屬性值,結(jié)果將是:
  
  調(diào)用:
  
  System.out.println("singleline? " + p.getProperty("singleline"));
  System.out.println("multiline ? " + p.getProperty("multiline"));
  
  結(jié)果:
  
  singleline? Single line value
  multiline ? This example shows how we
  
  multiline屬性只包含了第一行值。那么,如何解決這個問題呢?其實很簡單,只需要在每個行的末尾加上轉(zhuǎn)義字符“/”就可以了。修改后的屬性文件如下所示:
  
  singleline=Single line value
  multiline =This example shows how we can write a property value over multiple lines in a properties file
  
  再次讀取屬性文件的值,multiline的屬性值就能夠完整地讀取出來

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 偃师市| 苍南县| 孝昌县| 安岳县| 阿勒泰市| 砚山县| 五家渠市| 巴青县| 广灵县| 右玉县| 福清市| 东阿县| 清新县| 上蔡县| 石首市| 子洲县| 龙州县| 金湖县| 大名县| 昌图县| 威远县| 杭锦旗| 凌云县| 富川| 乌拉特前旗| 调兵山市| 河东区| 安图县| 堆龙德庆县| 台湾省| 黑龙江省| 集安市| 桃园县| 中方县| 兴化市| 岚皋县| 鲜城| 五寨县| 浦江县| 佛冈县| 浦江县|