網頁

2014年3月25日 星期二

HSQLDB使用JDBC建立Column

在初期階段,會因為實務上的需求,尚未十分確定,所以常常會對Column進行建立,修改,刪除等動作,因此需先了解這類的語法,才能即時地修改Table結構,當然你也可以使用GUI來操作,不過當Table數量眾多時,以代碼方式修正,才能有效率地批次修改。

2014年3月24日 星期一

Memory Leak修復Thread

為了增加執行效率,使用Thread是常見的方法,不過建立Thread也是需要花費昂貴的資源,若沒有限制數量的話,很容易就將內存消耗殆盡,又怎能執行原先欲要處理的商業邏輯,所以使用Thread Pool來修復,消耗過多的資源所造成的Memory Leak內存洩漏。

2014年3月22日 星期六

Maven使用Eclipse導入Library

隨著專案的開發,需要使用的Open Source Library會越來越多,而各版本衝突的問題更是屢見不鮮,因此需要個良好的管理方式,來解決這類的問題。


Maven提供了便利的方式,來輔助我們開發系統,pom.xml(Project Object Model),可以讓我們方便設定,在每個<dependency>中要設定的哪些Group Id,Artifact Id等,都可以在 http://mvnrepository.com/ 搜尋,找到後複製貼上到pom.xml即可,很方便就能導入Library

2014年3月21日 星期五

HSQLDB使用JDBC建立Table

DDL(Data Definition Language)是用於定義資料庫的結構與物件的語言,包括內外模式,概念模式及其相互之間的應對,定義資料的完整性,安全控制等。
  1. CREATE
  2. ALTER
  3. DROP

這次Mix使用HSQLDB所提供的JDBC Driver,連接到Database,來使用DDL操作,進行建立Table,修改Table等動作。

2014年3月20日 星期四

Memory Leak修復substring()

Mix經常在使用字串,也知道作字串增刪的時候,不要使用+,-等這類的運算元,而是改用StringBuffer或StringBuilder來處理字串,不過在某些狀況下,還是有可能會造成Memory Leak內存洩漏。


為了觀察GC狀況,Mix在Eclipse -> Install JREs,預設JVM參數,只加上-verbose:gc,不作任何其他的優化,針對1個大字串,長度約1M大小,使用substring()來取2個字元,重複1萬次,來進行測試。

2014年3月17日 星期一

HSQLDB使用GUI建立Table

Database建立完成之後,接著就可以使用HSQLDB本身提供的GUI,來建立Table:Book,首先,Mix先用伺服器模式啟動HSQLDB,這要運行/hsqldb/bin/runServer.bat,再來使用JDBC URL來設定 IP,Port與Database name。


  1. URL:jdbc:hsqldb:hsql://localhost:9001/openyu_java
  2. 預設帳戶:SA
  3. 預設密碼:

2014年3月16日 星期日

HSQLDB啟動多個Database

除此預設的Database外,我們也可以建立1個設定檔,指定Database的相關設定,就可以同時啟動多個Database來供我們測試使用。





Mix建立1個server.properties檔案,並放在/hsqldb/data目錄下,內容如下:

server.port = 9001
server.database.0 = file:../data/openyu_java
server.dbname.0 = openyu_java
#server.database.1 = file:../data/openyu_java2
#server.dbname.1 = openyu_java2
server.silent = true

2014年3月15日 星期六

Commons Lang使用StopWatch

當需要計算特定的method或block所花費的執行時間時,通常可以利用System.currentTimeMillis() ,設定起始及結束時間,兩者相減所得的差異來得知,不過Apache Commons Lang 提供了StopWatch類別,可以更方便地得知詳細資訊。


2014年3月14日 星期五

Commons Lang使用CompareToBuilder

當implement Comparable時,是需要實作compareTo(),Apache Commons Lang 提供了CompareToBuilder類別,能夠快速地實作compareTo(),只要建構CompareToBuilder實例,並append所需要的field,就可以得到結果。


2014年3月13日 星期四

Commons Lang使用ToStringBuilder

Apache Commons Lang 提供ToStringBuilder類別,能夠快速地實作toString(),只要建構ToStringBuilder實例,並append所需要的field,同時還可以選格式,就可以得到不同格式的結果。

2014年3月12日 星期三

Commons Lang使用HashCodeBuilder

當覆寫了equals(),也需一併覆寫hashCode(),Apache Commons Lang 提供了HashCodeBuilder類別,能夠快速地實作hashCode(),建構HashCodeBuilder實例,並append與equals()內相同的field,就可以得到結果。


2014年3月11日 星期二

Commons Lang使用EqualsBuilder

每個物件都有equals()這個方法,它是來自於Object class所定義的,Apache Commons Lang 提供了EqualsBuilder類別,能夠快速地實作equals(),只要建構EqualsBuilder實例,並append所需要的field,就可以得到結果。


2014年3月10日 星期一

HSQLDB建立Database

或許你已習慣使用MySQL,MSSQL,Oracle等這類的Database,不過當我們在開發階段時,對這類環境的架設與調校,可能不是那麼得心應手,再加上資安的考量,很多情況下,開發人員是無法接觸這類環境,這時候我們可以考慮用其他Database開發測試,之後再轉入營運用的環境。


HSQLDB是1個Java開源的關聯式Database,其體積與佔用空間小,而且支援內存運行,不需安裝,只要下載後,解開壓縮檔執行即可,是個在開發階段很方便使用的Database

2014年2月17日 星期一

Maven使用Eclipse main()測試代碼

專案建立好了之後,Maven會根據範本,幫你自動產生App.java與AppTest.java,開啟查看其Class內容,使用Eclipse,只是很單純地顯示訊息在console,接著我們可以用main()來執行App,或是用JUnit 的方式,執行AppTest來查看其結果。

2014年2月16日 星期日

Maven使用Eclipse建立Java專案

建立Java專案有很多方式,其目錄結構也都不盡相同,尤其當要導入大量相依函式庫時,更是會面臨到許多版本衝突的問題,以往解決這類問題,只能逐步調試,慢慢找出衝突所在,再一一修正版本問題。


2014年2月15日 星期六

Eclipse使用main()測試代碼

建立好了專案之後,測試看看Java程式是怎樣運行的,Mix寫1支main程式,是Java的執行起點,測試代碼的內容只有一行指令,使用Eclipse,單純地在console秀出訊息,並沒有其他的商務邏輯。


2014年2月14日 星期五

Eclipse建立Java專案

Java的IDE(整合開發環境)有很多種,有些是免費,而有些是要付費的,如果你已習慣某種IDE,不妨看看Eclipse,如果還在尋找適合的IDE,那也更要試試Eclipse,它是由Open Source Community所開發的IDE軟體,是開源的IDE,被廣泛地使用在許多不同的領域,其豐富的plugin,更可以依自己喜好而選擇添加。


2014年2月13日 星期四

Commons Beanutils使用copyProperties()

當bean有很多的field,要複製到另一個bean時,大量的getter/setter代碼,會增加了代碼長度和閱讀難度,而Apache Commons Beanutils提供了copyProperties()來處理大量的field,1個很常見的情況就是Struts中的的bean和對應的ActionForm複製。

2014年2月12日 星期三

Commons Beanutils使用getIndexedProperty()

訪問集合或陣列內bean的field,Apache Commons Beanutils提供了getIndexedProperty()來處理,透過BeanUtils的靜態方法,取得集合或陣列bean中的單一元素值的方法,利用這個方法,Mix可以很方便的取得field值。

2014年2月11日 星期二

Commons Beanutils使用getProperty()

如果不使用getter/setter,訪問bean內的field的話,Apache Commons Beanutils提供了getProperty()來處理,透過BeanUtils的靜態方法,取得field的方法,給定field的名稱,可以用 "." 的表示法,利用這個方法,Mix可以很方便地取得field值。

2014年2月10日 星期一

Commons Beanutils使用setProperty()

有時不能只依靠getter/setter操作bean,如:需要名字動態取得的,或是訪問bean內的field,甚至是集合或陣列內bean的field,利用反射機制對bean的field進行處理,這時候就需要Apache Commons Beanutils來協助處理。


2014年2月5日 星期三

TestNG使用Eclipse建立Test Case

除了JUnit可以進行單元測試外,還可以使用TestNG來撰寫Test Case,這是另一種測試Framework,它是為更廣泛的測試場合而設計,可以運行在沒有修改過的JUnit測試,除非看到它們的import,否則幾乎感覺不到它們的差異。


2014年2月2日 星期日

JUnit使用Eclipse建立Test Suite

JUnit有多個或所有的Test Case要執行,此時就需要Test Suite來管理眾多的Test Case,利用Eclipse的整合開發環境,可以針對多個不相關的Test Case或Test Suite進行包裝,可以讓Mix方便地執行單元測試。


2014年2月1日 星期六

JUnit使用Eclipse建立Test Case

傳統的測試方式,是以main(),作為代碼的起點,而這次Mix將利用JUnit 進行測試,Eclipse有提供完整的整合環境,可以方便地使用JUnit,讓Mix快速地進行單元測試,首先,開始撰寫第1個Test Case


2014年1月12日 星期日

Effective Java實作Comparator

如果集合或陣列內的物件,有1個以上不同的排序邏輯時,那該如何處理呢?尤其是當已經實現了Comparable,又不能變動原本的邏輯時,Mix會採用Comparator來處理。


2014年1月11日 星期六

Effective Java實作Comparable

當集合或陣列內的物件需要排序時,會利用Collections.sort或Arrays.sort來進行排序,通常會implement Comparable,來實現自定義排序,透過回傳值來表示排序的大小。


2014年1月10日 星期五

Effective Java實作toString()

Object class中,也定義了toString()這個方法,因此所有的class也都繼承這個方法。預設是傳回這個物件完整類別名稱,後面接一個"@",及一個不帶正副號的十六進制hash碼。


2014年1月9日 星期四

Effective Java提升Code Coverage代碼涵蓋率

雖然我們已經有了測試程式,但是如何得知是否已完整測試了主程式?,透過Code Coverage代碼涵蓋率,我們可以快速地得知,目前系統中,有多少程式中被測試過,不考量成本跟投資效益比,涵蓋率越高,代表系統如預期正常運作的面向也越廣泛。


雖然Effective Java並沒有明確指出Code Coverage代碼涵蓋率的比率,不過因為Mix採用單元測試的方式進行測試,所以還是有必要了解,測試代碼是否能夠涵蓋比較多的主代碼。

2014年1月8日 星期三

Effective Java實作hashCode()

hashCode()這個方法,也是定義在Object class中,這個是所有class的base class,因此所有的class也都繼承這個方法,預設是傳回這個物件儲存的記憶體位址編號,因為Mix覆寫了equals(),所以也應該一併覆寫hashCode(),Effective Java中推薦的實現方式如下:


2014年1月7日 星期二

Effective Java實作equals()

equals()這個方法,定義在Object class中,這個是所有class的base class,因此所有的class都繼承這個方法,預設是比較內存位址,不過Mix需要的是商務邏輯上的比較,所以會覆寫equals()。


2014年1月6日 星期一

Effective Java單元測試TestNG

TestNG是另一種單元測試的framework,與JUnit的類似,這次Mix將使用它來撰寫測試程式,大部分所引用的class package都一樣,只差在JUnit與TestNG的字樣,可以直接用搜尋取代字串,快速替代掉,或是用IDE plugin直接轉換成測試程式碼。


2014年1月5日 星期日

Effective Java單元測試JUnit

實作了RoleImpl class,現在要開始單元測試了,或許你會覺得奇怪,才剛做好一個class而已,它並沒有商務邏輯,只有getter/setter與clone(),那是要測試什麼呢?沒錯,傳統上而言,是會等到有功能後才進行測試,甚至沒有單元測試,而是直接交付給測試人員或使用者,進行整合測試。


2014年1月3日 星期五

Effective Java實作類別

定義好了Interface之後,現在我們開始來實作類別:Role,建立一個class,implements Role,將3個屬性及clone()實作出來,單純的getter與setter,可以利用IDE工具,自動產生代碼。


2014年1月2日 星期四

Effective Java設定遊戲

首先,我們先設定遊戲,一個網頁遊戲的基本場景,主角擁有各種能力,但一開始數值都只有系統初始,隨著故事的發展,會接觸到各種不同的場景,獲得提升角色的道具與裝備,來參與更高難度的任務。


2014年1月1日 星期三

Effective Java從零開始

或許你已經開始寫Java了,或許只是想要一窺這個的世界,無論是抱著何種心情來看Java從零開始,會一種沒有負擔,沒有包袱的事,你會發現寫程式不再是枯燥乏味,孤單寂寞的一個人,而是生活中最快樂的學習之一。