北京圣思园_Java SE Lesson 11
Java SE Lesson 11
?
1.? 所謂自定義異常,通常就是定義了一個(gè)繼承自Exception類的子類,那么這個(gè)類就是一個(gè)自定義異常類。通常情況下,我們都會(huì)直接繼承自Exception類,一般不會(huì)繼承
某個(gè)運(yùn)行時(shí)的異常類。
?
3.? 如果try 塊中存在return 語(yǔ)句,那么首先也需要將finally塊中的代碼執(zhí)行完畢,然后方法再返回。例如:
?
?
try
????????????? {
???????????????????? System.out.println("進(jìn)入到try塊");??? // 第 1 次打印
????????????????????
???????????????????? System.exit(0);???????????????????? //? 執(zhí)行了 finally 中的語(yǔ)句后就會(huì)退出方法
????????????? }
????????????? catch(Exceptionex)
????????????? {
???????????????????? System.out.println("異常發(fā)生了");
????????????? }
????????????? finally
????????????? {
???????????????????? System.out.println("進(jìn)入到finally塊");???? //? 第2條打印語(yǔ)句
????????????? }
?????????????
????????????? System.out.println("異常處理后續(xù)的代碼");???? //? 這 條語(yǔ)句不會(huì)執(zhí)行
?????? }
?
4.? 如果try 塊中存在System.exit(0)語(yǔ)句,那么就不會(huì)執(zhí)行finally塊中的代碼,因?yàn)镾ystem.exit(0)會(huì)終止當(dāng)前運(yùn)行的Java虛擬機(jī),程序會(huì)在虛擬機(jī)終止前結(jié)束執(zhí)行。
?
5.?GUI(Graphical User Interface),圖形用戶界面。
?
基本組件???? 容器
?
容器 :? 窗口??對(duì)話框?? 所有的容器類都是?java.awt.Container?的直接、間接子類。
?
?
6.?AWT(AbstractWindow Toolkit),抽象窗口工具集,第一代的JavaGUI 組件,是重量級(jí)的。基本的AWT庫(kù)處理用戶界面元素的方法是把這些元素的創(chuàng)建和行為委托給每個(gè)目標(biāo)平臺(tái)上(Windows、Unix、Macintosh等)的本地GUI工具進(jìn)行處理。不同的平臺(tái)效果不同。
?
?
7.?Swing,不依賴于底層細(xì)節(jié),輕量級(jí)的組件。
?
? Panel是Java.awt.Panel的對(duì)象
–Panel是Java.awt.Panel的對(duì)象。Panel包含在另一個(gè)容器中,或是在Web瀏覽器的窗口中Panel確定一個(gè)四邊形,其它組件可以放入其中。Panel必須放在Window之中(或Window的子類中)以便能顯示出來(lái)
?
–在框架顯示在屏幕上之前,必須做成可見的(通過(guò)調(diào)用程序setVisible(true)),而且其大小是確定的(通過(guò)調(diào)用程序setSize()或pack())
?
?
java.lang.Object
?? |
??+----java.awt.Component
??????????|
??????????+----java.awt.Container
?????????????????? |
??????????????????+----
java.awt.Window ???????????????????????????????????????????? java.awt.Panel
?????????????????????????? |
??????????????????????????????? +----
java.awt.Frame?????????????????????????????????????????? java.awt.Dialog
?
?
? 在AWT中,給我們提供了五種布局管理器:
?
BorderLayout
??? FlowLayout
??? GridLayout
??? CardLayout
???GridBagLayout
?
? 容器中組件的布局通常由布局管理器控制。每個(gè)Container(比如一個(gè)Panel或一個(gè)Frame)都有一個(gè)與它相關(guān)的缺省布局管理器,它可以通過(guò)調(diào)用setLayout()來(lái)改變?
?
改變布局管理器:
?
frame = new Frame("gui example");
frame.setLayout(new FlowLayout());
?
?
布局管理器:
BorderLayout是Frame類的默認(rèn)布局管理器 ,BorderLayout 也是一個(gè)類
???? BorderLayout將整個(gè)容器的布局劃分成東、西、南、北、中五個(gè)區(qū)域,組件只能被添加到指定的區(qū)域。????????????????? 組件大小改變,相對(duì)位置不變
?
????? Flow布局管理器不限制它所管理的組件的大小,而是允許它們有自己的最佳大小。?默認(rèn)是居中放置組件??????組件大小不變,位置改變
?
newFlowLayout(FlowLayout.RIGHT,20,40);
?右對(duì)齊,組件之間水平間距20個(gè)像素,豎直間距40個(gè)像素;
?
newFlowLayout(FlowLayout.LEFT);
?左對(duì)齊,水平和豎直間距為缺省值:5;
?
new FlowLayout();
?使用缺省的居中對(duì)齊方式,水平和豎直間距為缺省值:5;
?
?
? Grid布局管理器為放置組件提供了靈活性。用許多行和欄來(lái)創(chuàng)建管理程序。然后組件就填充到由管理程序規(guī)定的單元中。將組件添加到網(wǎng)格中的命令決定它們占有的單元。單元的行數(shù)是從左到右填充,就像文本一樣,而列是從上到下由行填充。
?
? Panel
–Panel無(wú)法單獨(dú)顯示,必須添加到某個(gè)容器中。
–Panel的缺省布局管理器為FlowLayout。
–當(dāng)把Panel作為一個(gè)組件添加到某個(gè)容器中后,該P(yáng)anel仍然可以有自己的布局管理器。因此,可以利用Panel使得BorderLayout中某個(gè)區(qū)域顯示多個(gè)組件。
?
在程序中安排組件的位置和大小時(shí),應(yīng)注意:
–容器中的布局管理器負(fù)責(zé)各個(gè)組件的大小和位置,因此用戶無(wú)法在這種情況下設(shè)置組件的這些屬性。如果試圖使用Java語(yǔ)言提供的setLocation(),setSize(),setBounds()等方法,則都會(huì)被布局管理器覆蓋。
?
–如果用戶確實(shí)需要親自設(shè)置組件大小或位置,則應(yīng)取消該容器的布局管理器,方法為:
? setLayout(null);
?
?
Java SE Lesson 12
?
AWT 事件模型:
?
–-編寫代碼來(lái)處理在圖形用戶界面中發(fā)生的事件。
–-描述Adapter類的概念,包括如何和何時(shí)使用它。
–-根據(jù)事件對(duì)象的細(xì)節(jié)來(lái)確定產(chǎn)生事件的用戶動(dòng)作。
–-為各種類型的事件創(chuàng)建合適的接口和事件處理。
?
?-事件-描述發(fā)生了什么的對(duì)象
?-事件源-事件的產(chǎn)生器
?-事件處理器-接收事件、解釋事件并處理用戶交互的方法
?
2.? 當(dāng)單擊一個(gè)按鈕時(shí)就會(huì)產(chǎn)生一個(gè)事件(ActionEvent),然后檢查是否有與該按鈕關(guān)聯(lián)的事件處理器(實(shí)際上就是一個(gè)方法),如果沒(méi)有,那么什么都不執(zhí)行;如果有,就會(huì)將該事件傳遞給與該按鈕關(guān)聯(lián)的事件處理器方法,作為該方法的參數(shù),之后該事件處理器方法就會(huì)自動(dòng)得到調(diào)用,并且該方法可以使用傳遞過(guò)來(lái)的ActionEvent對(duì)象,進(jìn)而獲得事件發(fā)生時(shí)與該事件及事件源相關(guān)聯(lián)的那些信息。
?
3.?Java中的組件若想添加事件處理器,都會(huì)使用形如addXxxListener的方法來(lái)添加。
?
類 ????????????????????????????? 對(duì)應(yīng)事件說(shuō)明
?
MouseEvent? ????????????? 鼠標(biāo)事件
鼠標(biāo)按下,鼠標(biāo)釋放,鼠標(biāo)點(diǎn)擊等
WindowEvent ????? ?????? 窗口事件
點(diǎn)擊關(guān)閉按鈕,窗口得到與失去焦點(diǎn),窗口最小化等
ActionEvent ?????????????? 動(dòng)作事件不代表具體的動(dòng)作,是一種語(yǔ)義,如按鈕或菜單被鼠標(biāo)單擊,單行文本框中按下回車鍵等都可以看作是ActionEvent事件
?
方法類型和接口:
?
?
適配器:
?
? 你定義的Listener可以繼承Adapter類,而且只需重寫你所需要的方法
? 為了方便起見,Java語(yǔ)言提供了Adapters類,用來(lái)實(shí)現(xiàn)含有多個(gè)方法的類。這些Adapters類中的方法是空的。
?你可以繼承Adapters類,而且只需重寫你所需要的方法
?
為簡(jiǎn)化編程,JDK針對(duì)大多數(shù)事件監(jiān)聽器接口定義了相應(yīng)的實(shí)現(xiàn)類,我們稱之為事件適配器(Adapter)類
?
在適配器類中,實(shí)現(xiàn)了相應(yīng)監(jiān)聽器接口所有方法,但不做任何事情,只要繼承適配器類,就等于實(shí)現(xiàn)了相應(yīng)的監(jiān)聽器接口
?
如果要對(duì)某類事件的某種情況進(jìn)行處理,只要覆蓋相應(yīng)的方法就可以,其他的方法再也不用“簡(jiǎn)單實(shí)現(xiàn)”了
?
如果想用作事件監(jiān)聽器的類已經(jīng)繼承了別的類,就不能再繼承適配器類了,只能去實(shí)現(xiàn)事件監(jiān)聽器接口了,java中是單繼承的。
?
?
觀察者模式:
?
? 觀察者模式定義了一種一對(duì)多的依賴關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽某一個(gè)主題對(duì)象。這個(gè)主題對(duì)象在狀態(tài)上發(fā)生變化時(shí),會(huì)通知所有觀察者對(duì)象,讓他們能夠自動(dòng)更新自己。
?
?觀察者模式在Java語(yǔ)言中的地位極其重要
? JDK也提供了對(duì)觀察者模式的內(nèi)置支持
?
? Observable類用于創(chuàng)建可以觀測(cè)到你的程序中其他部分的子類。當(dāng)這種子類的對(duì)象發(fā)生變化時(shí),觀測(cè)類被通知。觀測(cè)類必須實(shí)現(xiàn)定義了update()方法的Observer接口。當(dāng)一個(gè)觀測(cè)程序被通知到一個(gè)被觀測(cè)對(duì)象的改變時(shí),update( )方法被調(diào)用。
?
?
? 一個(gè)被觀測(cè)的對(duì)象必須服從下面的兩個(gè)簡(jiǎn)單規(guī)則。第一,如果它被改變了,它必須調(diào)用setChanged( )方法。第二,當(dāng)它準(zhǔn)備通知觀測(cè)程序它的改變時(shí),它必須調(diào)用notifyObservers( )方法。這導(dǎo)致了在觀測(cè)對(duì)象中對(duì)update( )方法的調(diào)用。注意——當(dāng)對(duì)象在調(diào)用notifyObservers( )方法之前,沒(méi)有調(diào)用setChanged( )方法,就不會(huì)有什么動(dòng)作發(fā)生。在update( )被調(diào)用之前,被觀測(cè)對(duì)象必須調(diào)用setChanged( )和notifyObservers( )兩種方法。?
?
?
? 為了觀測(cè)一個(gè)可觀測(cè)的對(duì)象,必須實(shí)現(xiàn)Observer接口。這個(gè)接口僅僅定義了如下所示的一個(gè)方法。
–void update(Observable observOb, Object arg)
–這里,observOb是被觀測(cè)的對(duì)象,而arg是由notifyObservers( )方法傳遞的值。當(dāng)被觀測(cè)對(duì)象發(fā)生了改變,調(diào)用update( )方法
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的北京圣思园_Java SE Lesson 11的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java 手机动态口令_动态密码TOTP
- 下一篇: 最全的 JVM 面试知识点(二):垃圾收