?? java入門(12) 事件與錯誤處理.htm
字號:
<BR><BR> 程序的輸出是一個空白的Frame,大家現在按下關閉按鈕,你會發現,這個Frame馬上被關閉了。我們實現了我們的目標。
<BR><BR> 傳授新知 <BR><BR> 下面,我們一起來看一下這個程序: <BR><BR> 1) <BR><BR><BR>public
static void main(String args[])
<BR><BR><BR><BR> 大家應該還記得,一個Java應用程序(Application)是從main方法開始執行的吧!
<BR><BR> 2) <BR><BR><BR>Frame frame1=new Frame("This is a Frame");
<BR><BR><BR><BR> 在這時,我們定義了一個Frame,這個我們學習過了,不會多說。 <BR><BR> 3)
<BR><BR><BR>frame1.addWindowListener(new WindowAdapter() <BR>{ <BR>public
void windowClosing(WindowEvent e) <BR>{ <BR>System.exit(0); <BR>} <BR>});
<BR><BR><BR><BR> 這段程序是本節最重要的內容。它為容器frame1增加了一個有關window(窗口)的事件監測器。監測的事件是什么?是windowClosing,也就是按下關閉按鈕。
<BR><BR> 如果監測到這個按鈕被按下時,就執行System.exit(0)退出程序。 <BR><BR> 4)
<BR><BR><BR>frame1.setSize(200,200); <BR>frame1.show();
<BR><BR><BR><BR> 這兩句語句,大家應該也不會陌生,我們先將Frame設置為200*200大,然后調用show方法將其顯示出來。
<BR><BR> 自測練習 <BR><BR> 1)
當一個部件有一個事件發生,但并沒有為這個部件的這個事件指定事件監測器,將會發生什么?________________。
<BR><BR> a.編譯時就不會通過 b.引起Java程序發生致命錯誤 <BR><BR> c.忽略這個事件 d.引發默認的事件處理
<BR><BR> 2) 通常我們使用____________方法來為一個部件增加事件監視器。 <BR><BR> a.addXXXListener
b.XXXListener <BR><BR> 3) 事件監視器包含在_____________包中。
<BR><BR> a.java.awt.happen b.java.until c.java.awt.event <BR><BR> 4)
按鈕按下事件名是__________。 <BR><BR> a.PressedEvent b.ActionEvent <BR><BR> 5)
在Java應用程序(Application)中不能夠使用JButton對象?_______。 <BR><BR> a.對 b.錯
<BR><BR> 6) 僅有GUI部件可以產生事件?___________。 <BR><BR> a.對 b.錯 <BR><BR> 請說明理由:
<BR><BR> ____________________________________________________________________
<BR><BR> 練習答案 <BR><BR> 1)c
這個事件將被忽略,因為Java中并不存在默認的事件處理。當然也不會使Java程序異常退出,Java還不至于如此脆弱吧! <BR><BR> 2)a
當你遇到這種形式的語句,就是增加事件監測器。 <BR><BR> 3)c 在java.awt.event和javax.swing.event中。
<BR><BR> 4)b ActionEven。 <BR><BR> 5)b
雖然我們一直都在以Applet為例,但這不證明,Application中不能夠使用這些GUI部件。我們完全可以使用這個GUI部件組成一個Application程序。
<BR><BR> 6)b 這是一種錯覺,最簡單的例子就是Frame,它是容器呀,其實還有許多東西可以發生事件。
<BR><BR> 12.2錯誤處理 <BR><BR> 傳授新知
<BR><BR> “世界上并不存在完全無錯的程序”,我們不討論它是不是一條真理。但它的確是一條警語,它告誡我們在編寫程序時一定要注意盡可能地避免錯誤。
<BR><BR> 程序運行出錯時會超出程序員的控制,使得程序“南轅北轍”,不僅無法正常完成功能,而且還會出現一些可怕的事情。
<BR><BR> 注意:
<BR><BR> 由于程序設計的錯誤而引起的事故數不勝數,損失最巨大的是美國的一次火箭發射,在那次悲劇中,在程序中由于錯把“,”寫成了“;”,卻使得火箭在天上爆炸,所以為防止程序設計錯誤花再大的人力、物力也是應該的。
<BR><BR> 最有效的解決方法是在程序設計是,有意識地加入一些機制,使其能夠在運行時檢測自己,在錯誤失控之前,報告出來。
<BR><BR> 最常見的一種錯誤處理是為每一個方法(其它語言,就是每一個函數)返回一個狀態值,用來指示該方法是否成功、正確地完成了任務。當調用這個方法的程序收到了一個錯誤的狀態值,就能夠得知程序出錯了,再采取有效的措施避免這個錯誤引起的問題(最簡單的方法就是退出程序,或給出提示提醒操作者)。
<BR><BR> 下面我們來考察一下簡單的例子: <BR><BR><BR>public int getIndex(String
emailaddr) <BR>{ <BR>for(int x=0;x
<BR><BR><BR> 這個方法用來在emailaddr字符串中找到“@”符所在的位置,然后返回位置值。但細心的讀者應該能夠很快地提出一個問題:假如emailaddr中沒有“@”符,那么這個程序將返回什么呢?
<BR><BR> 對,這就是潛在的錯誤可能。當emailaddr中沒有“@”符時,不管返回什么值,可以確定的一點就是返回的值一定不正確!
<BR><BR> 然后,調用這個方法的程序并不知道它得到了一個錯誤的返回呀!它會當作一個正確的值繼續運行下去。糟了,“多米諾骨牌”啟動了!一個錯誤引發了。
<BR><BR> 所以,我們應該在這種時候,給調用這個方法的程序一個提示,那就是返回一個明確的錯誤值,比如在這里我們可以使用-1來表示沒找到。使用這種思想,我們將程序改寫一下,形成:
<BR><BR><BR>public int getIndex(String emailaddr) <BR>{ <BR>for(int x=0;x
<BR><BR><BR> 我們在原來的程序中加上了一句:return(-1),這時程序的邏輯發生了變化,當找到時“@”符時,將返回它所在的位置。而如果找不到,那么就會執行:return(-1)。
<BR><BR> 然后我們在調用這個方法的程序收到的返回值是-1時,就能夠意識到錯誤發生了。 <BR><BR> 自測練習
<BR><BR> 1) 請創建一個方法,在整數數組intArray查找是否有一個成員為5,有就返回它的位置。并且請注意加上一些錯誤處理機制。
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> 在這個程序中,你使用了什么錯誤處理機制。
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> 如果整型數組intArray的值是{2,5,6,9,10}那么,返回什么值?
<BR><BR> ____________________________________________________________________
<BR><BR> 如果值是{4,6,2,90,8},則返回什么值?
<BR><BR> ____________________________________________________________________
<BR><BR> 練習答案 <BR><BR> 1) 以下一個實例: <BR><BR><BR>public int searchfive(int
intArray[]) <BR>{ <BR>for(int x=0;x
<BR><BR><BR> 在這個程序中,我們采用了通用的錯誤標識機制,也就是說,找到數字5,返回它的位置,而找不到數字5時,就返回-1。這樣可以讓調用這個方法的程序知道這個方法的執行效果。
<BR><BR> 如果整型數組intArray的值是{2,5,6,9,10}那么將返回1。
<BR><BR> 而如果值是{4,6,2,90,8},那么將找不到5,因而返回-1。 <BR><BR> 12.3異常處理
<BR><BR> 傳授新知
<BR><BR> 然而在有些情況下,合法的返回值和標識一個錯誤情形的返回值之間不能明確區分。這種情況下錯誤出現的地方,稱為異常情形。這個異常錯誤是致命錯誤,經常使得程序異常退出。
<BR><BR> 在Java語言中,提供了一些處理這些異常情況的工具,能夠較好的處理這些情況,使得Java程序更加健壯。由于這方面的內容相對比較高級,很難使用較短的篇幅來說明,所以本書(一本入門的書)僅以只言片語,與大家做一個簡單的介紹。
<BR><BR> 1.異常處理的流程
<BR><BR> 在Java中,異常是由Exception類定義的對象,一旦產生異常,方法的正常控制流會立即停止,Java虛擬機(JVM)將試圖找出能夠捕獲的處理程序并處理這個特定的異常。如果找不到處理程序,Exception對象將向上層傳遞,一層一層地上傳,直至程序的main方法。如果還是找不到處理程序,程序將退出運行。
<BR><BR> 也就是說,Java已經預先定義了許多異常情況(使用Exception類定義),當程序發生異常時,Java虛擬機就會想辦法尋找排除異常的辦法(也就是尋找相應的處理程序),如果在當前方法中找不到,就會將這個異常情況報告給調用這個方法的程序段,然后繼續尋找相應的程序。如果還找不到就再向上一層傳遞,直到程序的main方法。如果都找不到,程序就會異常退出。
<BR><BR> 2.構建異常處理的程序 <BR><BR> 那么如何來構建這個異常處理程序呢?我們可以通過try/catch程序結構來設置:
<BR><BR><BR>try <BR>{ <BR>…… <BR>} <BR>catch(Exception ex) <BR>{ <BR>……
<BR>}
<BR><BR><BR><BR> 當try塊內的代碼產生了catch塊中指定的異常就跳過try塊內的后面的代碼,而執行catch塊內的程序。
<BR><BR> 而如果try塊內的代碼未產生catch塊中指定的異常,則跳過catch塊內的程序。
<BR><BR> 更多的內容可以參考專門的書籍。 <BR>
<P align=right>整理發布:admin</P></TD></TR>
<TR>
<TD
style="BORDER-RIGHT: #c0c0c0 1px solid; BORDER-TOP: #c0c0c0 1px solid; BORDER-LEFT: #c0c0c0 1px solid; BORDER-BOTTOM: #c0c0c0 1px solid"
vAlign=top width="100%" height=11>
<P align=left><FONT color=#7a7978>文摘分類>> </FONT><FONT
color=#999999>編程基礎 | </FONT><FONT color=#7a7978>閱讀次數>>
</FONT><FONT color=#999999>397 | </FONT><FONT
color=#7a7978>推薦人數>> </FONT><FONT color=#999999>0 |
</FONT><FONT color=#7a7978>整理日期>> </FONT><FONT
color=#999999>2003-03-07</FONT></P></TD></TR></TBODY></TABLE></CENTER></DIV>
<P align=center><INPUT class=rim onclick=window.close() type=button value=關閉窗口 name=close></P></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -