1. public void autoCatch()
2. {
3. try {
4. FileInputStream fis = null ;
5. byte[] bArr = new byte[1024] ;
6. //會拋出FileNotFoundException
7. fis = new FileInputStream("D:1.txt") ;
8. //會拋出IOException
9. fis.read(bArr) ;
10. }
11. catch(Exception ex) {
12. }
13. }
1. public void autoCatch()
2. {
3. FileInputStream fis = null ;
4. byte[] bArr = new byte[1024] ;
5. try {
6. //會拋出FileNotFoundException
7. fis = new FileInputStream("D:\1.txt") ;
8. //會拋出IOException
9. fis.read(bArr) ;
10. }
11. catch(FileNotFoundException ex) {
12. System.out.println("D:\1.txt文件不存在,請檢查") ;
13. }
14. catch(IOException ex) {
15. System.out.println("D:\1.txt文件讀寫發生異常,異常信息為:" +
16. ex.getMessage()) ;
17. }
18. finally {
19. if(fis != null) {
20. try {
21. fis.close() ;
22. }
23. catch(IOException ex1) {
24. System.out.println("關閉文件輸入流的時候發生異常,異常信息為:
25. " + ex1.getMessage()) ;
26. }
27. }
28. }
29. }
1. public void autoCatch()
2. {
3. FileInputStream fis = null ;
4. byte[] bArr = new byte[1024] ;
5. try {
6. //會拋出FileNotFoundException
7. fis = new FileInputStream("D:\1.txt") ;
8. //會拋出IOException
9. fis.read(bArr) ;
10. }
11. catch(FileNotFoundException ex) {
12. }
13. catch(IOException ex) {
14. }
15. }
然後,我們再手工添加上finally代碼處理塊,因為資源打開後,一般需要顯示關閉,以便快速釋放資源。調整的最後代碼如代碼清單 16所示。
實戰經驗:
雖然可以通過Ctrl+J以模板的方式快速錄入try...catch代碼塊,但是筆者還是傾向於用Ctrl+Shift+C自動生成異常捕捉塊,這樣不但提高了代碼編寫的速度,還保證異常捕捉代碼塊的規范性:為所有可能的異常分別生成一個捕捉塊,且將特殊的異常放在前面,一般性的異常則放在後面。3、部署描述文件
如果你的工程中有一個Web模塊,依據你所選用的Web技術可能會有多個不同的部署描述文件,你可以直接通過這些部署描述文件進行重構類名重構,如下面是一段Struts關於FormBean的部署描述信息:
代碼清單 18 Struts有關formBean的部署描述文件
1. <struts-config>
2. <form-beans>
3. <form-bean name="untitled1ActionForm" type="myrefactor.Untitled1ActionForm" />
4. </form-beans>
5. </struts-config>
在編譯器中打開需要重構的部署描述文件,將光標移到<form-bean>標簽的type屬性值中,點擊右鍵->Refactoring->Rename Class for “UntitleActionForm”,如下圖所示:
圖 28 在部署描述文件中重構類名的對話框
在New name中鍵入UserActionForm,點擊OK,JBuilder不但更改部署描述文件中的type屬性值,還將該屬性所對應的類名進行更名重構。
4、EJB
因為EJB設計器中知道一個EJB所有引用的類和接口,所以必須通過EJB設計器對EJB類進行更名。如果在編輯器或UML浏覽器中對EJB文件進行重命名重構,你將看到以下的警告信息:
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設計器中來重構。
5、代理
假設一個A類有一個成員類(B類),B類有一個方法foo(),如果C類想通過A類調用B類的foo()方法,則必須這樣:
A aObj = new A();
aObj.bObj.foo();
實際情況可能會有更多的銜接層,為了減少這種層層嵌套間接調用所造成臃腫的代碼,有時我們直接通過代理使代碼顯得簡潔。在A類中提供一個代理方法foo(){bObj.foo();},這樣C類只要這樣就可以訪問B類的foo()方法了:
A aObj = new A();
aObj.foo();
JBuilder提供了一個代理成員類方法的方便功能,來看下面的MultiAnimal類:
<